Mat*_*iew 28 sql database postgresql datetime timestamp
标题非常明确,我的问题是如果我得到两个小时的日期:
是否可以在这两个日期时间之间选择一个随机日期时间?
我尝试使用random()函数,但我真的没有得到如何使用datetime
谢谢
Matthiew
poz*_*ozs 59
select timestamp '2014-01-10 20:00:00' +
random() * (timestamp '2014-01-20 20:00:00' -
timestamp '2014-01-10 10:00:00')
Run Code Online (Sandbox Code Playgroud)
Dus*_*tin 10
我改编了@pozs的答案,因为我没有时间戳.
90 days
是你想要的时间窗口,30 days
是推动时间窗口的距离.当通过作业而不是在设定的时间运行它时,这很有用.
select NOW() + (random() * (NOW()+'90 days' - NOW())) + '30 days';
Run Code Online (Sandbox Code Playgroud)
您可以从随机整数(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'
Run Code Online (Sandbox Code Playgroud)
如果您经常使用它,请将其包装在 SQL 函数中,因为即使尝试对其进行某种格式化后,它的可读性也不是很好。
另一种方法是使用generate_series()
从开始日期到结束日期,按 random() 排序,但这会使较大的日期间隔变得非常缓慢,因此使用上述方法会更好。
归档时间: |
|
查看次数: |
16276 次 |
最近记录: |