获取日期范围内的随机日期

hc8w905p  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(420)

这个问题在这里已经有答案了

mysql在给定的datetime范围内插入随机datetime(8个答案)
两年前关门了。
我想更新我的专栏 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');
lmyy7pcs

lmyy7pcs1#

如果日期在1970年1月1日之后,则可以使用在两个时间戳之间生成随机时间戳 UNIX_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 ;

相关问题