如何在MySQL中添加时间间隔到时间戳?

时间:2017-06-03 09:04:11

标签: mysql random timestamp

我们得到了下表mytable

+----+------------+------------+
| id | created    | expired    |
+----+------------+------------+
|  1 | 1496476314 | NULL |
|  6 | 1496477511 | NULL |
|  7 | 1496477518 | NULL |
| 12 | 1496477534 | NULL |
| 13 | 1496477536 | NULL |
| 15 | 1496477541 | NULL |
| 21 | 1496477548 | NULL |
| 22 | 1496477550 | NULL |
| 26 | 1496477565 | NULL |
| 28 | 1496477566 | NULL |
| 29 | 1496477583 | NULL |
+----+------------+------------+

我们想要执行以下操作:

set expired = created + random(15 - 30 minutes) as unix_timestamp where expired is null;

我目前不知道这样做了。 如果你能给我一些想法,那就可以节省我的一天。

我尝试将created时间戳转换为date_time并将该date_time添加到所需的15 - 30分钟,最后将new_date_time转换回unix_timestamp,但应该有更简单的方法。

2 个答案:

答案 0 :(得分:2)

如果你想在14到33之间添加一个随机的分钟数,你可以这样做:

SET expired = DATE_ADD(created, INTERVAL 14 + RAND()*(33-14) MINUTE);

如果您想要秒数粒度,则需要添加SECOND类型的间隔:

SET expired = DATE_ADD(created, INTERVAL 14*60 + RAND()*(33-14)*60 SECOND);

如果您的过期列有DATETIME,这将节省一个日期时间转换,这会使记录过期(WHERE过期< NOW())稍微容易一些。如果你有一个包含Unix时间戳的整数,那么Darshan的回答是肯定的方式,你可以在应用程序中计算Unix时间戳,然后插上它在查询中:

WHERE expired <= 123456789

在该列上建立索引会使到期时间过得非常快。我认为它可能比datetime方法更快,但它只是一种感觉,我还没有真正检查过。

答案 1 :(得分:1)

unix_timestamp是自1970年1月1日以来经过的秒数。现在,如果您想要添加15到30分钟,那么等效秒数将是900到1800.这是您可以做的:< / p>

set expired = created + ROUND((RAND() * (900))+900) where expired is null;

这是它的工作原理:

  • RAND()将生成0到1之间的随机数
  • 使用RAND() * (maximum - minimum)) + minimum,我们确保生成900到1800之间的数字。
  • ROUND然后将该数字舍入到最近的int。