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

Bla*_*air 47 mysql sql random date

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

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

UPDATE mytable
SET col = sysdate() - rand(1, 14);
Run Code Online (Sandbox Code Playgroud)

Álv*_*lez 76

你可以用这个表达式获得一个随机整数:

要获得i <= R <j范围内的随机整数R,请使用表达式 FLOOR(i + RAND() * (j - i)).例如,要获取范围7 <= R <12的范围内的随机整数,可以使用以下语句:

SELECT FLOOR(7 + (RAND() * 5));
Run Code Online (Sandbox Code Playgroud)

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

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

SELECT NOW() - INTERVAL FLOOR(RAND() * 14) DAY;
Run Code Online (Sandbox Code Playgroud)


Sal*_*n A 16

UPDATE mytable
SET col = CURRENT_TIMESTAMP - INTERVAL FLOOR(RAND() * 14) DAY
Run Code Online (Sandbox Code Playgroud)

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


guy*_*oni 8

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

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
);
Run Code Online (Sandbox Code Playgroud)

或者,更优雅:

UPDATE mytable
SET col = (NOW() - INTERVAL FLOOR(RAND() * 14 * 24 * 60 * 60) SECOND);
Run Code Online (Sandbox Code Playgroud)


Pek*_*ica 6

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

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

SET col = DATE(DATE_SUB(NOW(), INTERVAL ROUND(RAND(1)*10) DAY)) 
Run Code Online (Sandbox Code Playgroud)