Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 获取日期范围内的随机日期_Mysql_Sql - Fatal编程技术网

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))中选择)