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

时间:2018-04-09 06:46:35

标签: mysql sql

我想更新我的专栏dateStartdateEnd。这些日期应该是两个日期之间的随机日期。

因此dateStart的日期范围应为

2014-01-01至2018-01-01

dateEnd的日期范围应为

dateStart至2018-01-01

伪SQL:

UPDATE myTable
SET dateStart = RandomDateBetween('2014-01-01', '2018-01-01');

UPDATE myTable
SET dateEnd = RandomDateBetween(dateFrom, '2018-01-01');

1 个答案:

答案 0 :(得分:2)

如果日期在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 ;