如何使用MySQL更新过去2周内随机日期的列?
例如(代码实际上不起作用):
UPDATE mytable
SET col = sysdate() - rand(1, 14);
答案 0 :(得分:72)
您可以使用此表达式获取随机整数:
获取随机整数R. 范围i< = R< 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);