【问题标题】:how to get random only date(not with the time) within a range in mysql [duplicate]如何在mysql的范围内获取随机日期(不包含时间)[重复]
【发布时间】:2017-10-09 07:55:22
【问题描述】:

如何在特定的包含范围内选择一个随机日期,比如 mysql 工作台的“1950-01-01”和“1999-12-31”?我尝试了这个,但它不起作用,建议任何更有用的函数方法。我还发现其他问题也属于随机日期时间,但我也想指定随机数,有时它会在同一天出现,有时会在第二天出现,我的要求与其他问题指定的不同

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

【问题讨论】:

    标签: mysql


    【解决方案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

    【讨论】:

    • 当它不工作时,我很快就会知道它。谢谢你的评论。
    • 感谢您提供额外信息。
    【解决方案2】:

    您将通过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

    【讨论】:

    • 第二个答案中不需要子查询。
    • 知道了,但如果日期差异很大,这将花费很多时间,但这是个好主意。对于小日期差异。感谢您的评论
    • 您在间隔后使用了 select 关键字,因此尽管您的方法很好,但需要在此查询中稍作更改。
    猜你喜欢
    • 1970-01-01
    • 2014-11-06
    • 2012-08-08
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    相关资源
    最近更新 更多