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的范围内的随机整数,可以使用以下语句:Run Code Online (Sandbox Code Playgroud)SELECT FLOOR(7 + (RAND() * 5));
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天.
一个简单的选择是使用此查询:
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)
您的主要问题是RAND()
不允许您指定的一系列值.它将始终返回0到1之间的值.
我现在无法找到1..14随机解决方案,但为了让你开始,这将在过去10天内选择一个随机日期:
SET col = DATE(DATE_SUB(NOW(), INTERVAL ROUND(RAND(1)*10) DAY))
Run Code Online (Sandbox Code Playgroud)