Mysql 获取日期范围内的随机日期
我想更新我的列Mysql 获取日期范围内的随机日期,mysql,sql,Mysql,Sql,我想更新我的列dateStart和dateEnd。这些日期应该是两个日期之间的随机日期 因此dateStart的日期范围应为 2014-01-01至2018-01-01 和dateEnd的日期范围应为 日期开始至2018-01-01 伪SQL: UPDATE myTable SET dateStart = RandomDateBetween('2014-01-01', '2018-01-01'); UPDATE myTable SET dateEnd = RandomDateBetween(d
dateStart
和dateEnd
。这些日期应该是两个日期之间的随机日期
因此dateStart
的日期范围应为
2014-01-01至2018-01-01
和dateEnd
的日期范围应为
日期开始至2018-01-01
伪SQL:
UPDATE myTable
SET dateStart = RandomDateBetween('2014-01-01', '2018-01-01');
UPDATE myTable
SET dateEnd = RandomDateBetween(dateFrom, '2018-01-01');
如果日期在1970年1月1日之后,可以使用
UNIX\u timestamp
在两个时间戳之间生成随机时间戳。这也适用于闰年:
SELECT FROM_UNIXTIME(
UNIX_TIMESTAMP('2014-1-1') + FLOOR(
RAND() * (
UNIX_TIMESTAMP('2018-12-31') - UNIX_TIMESTAMP('2014-1-1') + 1
)
)
)
您可以将其设置为名为RandomDateBetween
的函数,您的查询将正常工作:
DELIMITER $$
CREATE FUNCTION RandomDateBetween (date_from DATE, date_to DATE)
RETURNS DATE
BEGIN
DECLARE result DATETIME;
SET result = (SELECT FROM_UNIXTIME(
UNIX_TIMESTAMP(date_from) + FLOOR(
RAND() * (
UNIX_TIMESTAMP(date_to) - UNIX_TIMESTAMP(date_from) + 1
)
)
));
RETURN DATE(result);
END$$
DELIMITER ;
重复链接中未包含的另一种可能性是,创建一个涵盖您的范围的日历表,然后使用
LIMIT
随机排序选择一行。对不起,我对此很陌生,我必须如何使用它?我是否应该用这整件事来取代RandomDateBetween?我用我自己的日期替换字符串?是的,你可以这样做,或者你可以简单地在MySQL中创建一个函数,调用它RandomDateBetween
,复制我的答案,然后用参数替换日期。然后,您的查询将在没有任何更改的情况下工作。请参阅我的更新答案。更新研讨会集dateFrom=(从UNIX\u时间戳('2014-01-01')+地板(RAND()*(UNIX\u时间戳('2018-01-01')-UNIX\u时间戳('2014-01-01')+1))中选择)代码>此工作,但它打印“1036行受影响,64条警告:1292不正确的日期值:第1行1292列“dateFrom”的“2016-01-07 04:23:35”。如果日期From
类型是日期
(而不是日期时间
),则需要在日期()函数中包含选择。因此更新研讨会集dateFrom=DATE(从UNIX\u时间戳('2014-01-01')+地板(RAND()*(UNIX\u时间戳('2018-01-01')-UNIX\u时间戳('2014-01-01')+1))中选择)代码>