在MySQL中插入/更新随机日期

时间:2010-12-28 12:42:37

标签: mysql sql date random

如何使用MySQL更新过去2周内随机日期的列?

例如(代码实际上不起作用):

UPDATE mytable
SET col = sysdate() - rand(1, 14);

4 个答案:

答案 0 :(得分:72)

您可以使用此表达式获取随机整数:

  

获取随机整数R.   范围i&lt; = R&lt; j,使用表达式   的 FLOOR(i + RAND() * (j - i)) 即可。对于   例如,获取一个随机整数   范围7 <= R&lt;范围7&lt; = R&lt; 12,你   可以使用以下声明:

SELECT FLOOR(7 + (RAND() * 5));

http://dev.mysql.com/doc/refman/5.1/en/mathematical-functions.html

用它来生成随机天数,小时数或分钟数(取决于分辨率),并将该数字添加到当前日期。完整表达将是这样的:

SELECT NOW() - INTERVAL FLOOR(RAND() * 14) DAY;

答案 1 :(得分:15)

UPDATE mytable
SET col = CURRENT_TIMESTAMP - INTERVAL FLOOR(RAND() * 14) DAY

这会将col设置为当前日期和当前日期之间的日期(包括) - 13天。乘以15得到当前日期 - 14天。

答案 2 :(得分:6)

您的主要问题是RAND()不允许您指定的一系列值。它将始终返回0到1之间的值。

我现在无法找到1..14随机解决方案,但为了让你开始,这将在过去10天内选择一个随机日期:

SET col = DATE(DATE_SUB(NOW(), INTERVAL ROUND(RAND(1)*10) DAY)) 

答案 3 :(得分:2)

一个简单的选择是使用此查询:

UPDATE mytable
SET col = (
    NOW() - INTERVAL FLOOR(RAND() * 14) DAY 
    + INTERVAL FLOOR(RAND() * 23) HOUR
    + INTERVAL FLOOR(RAND() * 59) MINUTE
    + INTERVAL FLOOR(RAND() * 59) SECOND
);

或者,更优雅:

UPDATE mytable
SET col = (NOW() - INTERVAL FLOOR(RAND() * 14 * 24 * 60 * 60) SECOND);