用作随机生日。需要仅生成日期。 我用过这个但是没有用。
UPDATE table SET column=FROM_UNIXTIME(ROUND((RAND() * (2838240000 - 630720000) + 630720000)));
答案 0 :(得分:2)
您的随机值超过了签名的unix时间戳的最大值,为2 ^ 31:
2^31 = 2,147,483,648
MariaDB [test]> select from_unixtime(2147483648), from_unixtime(2147483647);
+---------------------------+---------------------------+
| from_unixtime(2147483648) | from_unixtime(2147483647) |
+---------------------------+---------------------------+
| NULL | 2038-01-18 21:14:07 |
+---------------------------+---------------------------+
1 row in set (0.00 sec)
换句话说,你正在遭遇Y2038k问题。
e.g。
MariaDB [test]> select ROUND((RAND() * (2838240000 - 630720000) + 630720000));
+--------------------------------------------------------+
| ROUND((RAND() * (2838240000 - 630720000) + 630720000)) |
+--------------------------------------------------------+
| 2234566951 |
+--------------------------------------------------------+
1 row in set (0.00 sec)
MariaDB [test]> select from_unixtime(2234566951);
+---------------------------+
| from_unixtime(2234566951) |
+---------------------------+
| NULL |
+---------------------------+
1 row in set (0.00 sec)
答案 1 :(得分:1)
@Gordon Linoff有正确的方法。
假设"在20到90年之间"意味着从今天的当前日期开始,与今天的日期之前的90年相同,再加上随机天数(0到70 * 365之间)
我使用DATE(NOW())
返回当前日期,然后减去90年,然后添加一个随机天数。我将使用此表达式(将此返回值分配给UPDATE语句中的列)。这对我来说更容易破译。
UPDATE mytable
SET col = DATE(NOW()) + INTERVAL -90 YEAR + INTERVAL RAND()*70*365.25 DAY
如果"在20到90年之间"指定一些特定范围的日期值,然后使用一个表达式返回" start"该范围作为DATE值,并添加一个0到70年范围内的随机间隔(以天为单位)。