PostgreSQL获取两个日期时间/时间戳之间的随机日期时间/时间戳

时间:2014-04-09 13:35:47

标签: sql database postgresql datetime timestamp

标题非常明确,我的问题是如果我得到两个小时的日期:

  • 01-10-2014 10:00:00
  • 01-20-2014 20:00:00

是否可以在这两个日期时间之间选择一个随机日期时间?

我尝试使用random()函数,但我真的不知道如何在datetime中使用它

由于

Matthiew

3 个答案:

答案 0 :(得分:49)

您可以使用date/time operators

执行几乎所有操作
select timestamp '2014-01-10 20:00:00' +
       random() * (timestamp '2014-01-20 20:00:00' -
                   timestamp '2014-01-10 10:00:00')

答案 1 :(得分:9)

我改编了@pozs的答案,因为我没有时间戳可以去。

90 days是您想要的时间窗口,30 days是推送时间窗口的距离。当通过作业而不是在设定的时间运行它时,这很有用。

select NOW() + (random() * (NOW()+'90 days' - NOW())) + '30 days';

答案 2 :(得分:3)

您可以从随机整数(unix标记)构建时间戳,例如:

select timestamp 'epoch' + (
          extract('epoch' from timestamp '2014-10-01 10:00:00')
        + random() * (
                     extract('epoch' from timestamp '2014-20-01 20:00:00')
                   - extract('epoch' from timestamp '2014-10-01 10:00:00')
       )) * interval '1 second'

如果经常使用它,请将其包装在SQL函数中,因为即使在尝试对其进行格式化之后它也不太可读。

另一种方法是从开始日期到结束日期使用generate_series(),按random()排序,但这样会因为日期间隔较大而变得非常慢,所以你会更好采用上述方法。