2017-10-09 121 views
-1

如何在特定的包含范围内选择随机日期,比如说'1950-01-01'和'1999-12-31'用mysql工作台?我尝试这个,但它不工作,建议任何功能的方法,会更有帮助。我还发现,其他问题也属于随机日期时间,但我想还可以指定像一些次随机数谈到的同一天和某个谈到接下来的一天,我的要求是与其他问题不同的指定如何在mysql的范围内获得随机日期(不是时间)

select DateAdd(DD, ROUND(DateDiff(DD, '22-09-2016', '24-10-2016') * RAND(), 0) DD, '22-09-2016') 

回答

1

这个答案采用计算两个日期之间差异的方法,然后在0和整个差异范围内向开始日期添加一个随机数。

SELECT 
    DATE_ADD('1950-01-01', 
      INTERVAL FLOOR(RAND() * DATEDIFF('1999-12-31', '1950-01-01')) DAY) AS new_date 
FROM dual; 

我没有测试你的代码,但一个明显的错误现在是您存储和写日期的方式:

22-09-2016 

这种格式是不符合ANSI标准,和MySQL的最新功能可能会不能正常工作。相反,始终使用以年 - 月 - 日格式使用日期,或者与此非常相似。

演示在这里:

Rextester

+1

正确我很快就知道它不工作..感谢您的评论。 –

+1

感谢您的额外信息。 –

1

您将获得随机数与DATEDIFFRAND功能,例如:

SELECT (FLOOR(RAND() * DATEDIFF('2016-10-22', '2016-09-24'))); 

完成后,您可以使用DATE_ADD添加这些多天,例如:

SELECT DATE_ADD('2016-09-24', INTERVAL (SELECT (FLOOR(RAND() * DATEDIFF('2016-10-22', '2016-09-24')))) DAY); 

这是SQL Fiddle

+0

你的第二个答案中不需要子查询。 –

+0

了解它,但如果日期差异很大,则需要很长时间,但这是个好主意。对于小日期差异。感谢您的评论 –

+0

你已经使用select关键字后间隔如此稍微改变需要在这个查询,虽然你的做法是好的。 –

相关问题