标题相当明确,我的问题是如果我得到两个小时的日期:
是否可以在这两个日期时间之间随机选择一个日期时间?我尝试使用random()函数,但我真的不知道如何在datetime中使用它谢谢马修
liwlm1x91#
你可以用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')
xa9qqrwz2#
我改编了@pozs的答案,因为我没有时间戳可以关闭。90 days是您想要的时间窗口,30 days是将时间窗口推出去多远。这在通过作业而不是在设定的时间运行它时很有帮助。
90 days
30 days
select NOW() + (random() * (NOW()+'90 days' - NOW())) + '30 days';
cclgggtu3#
你可以从一个随机整数(unix stamp)构建时间戳,例如:
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'
如果您经常使用它,请将其 Package 在SQL函数中,因为即使尝试对其进行某种格式化,它也不是很可读。另一种方法是从开始日期到结束日期使用generate_series(),按random()排序,但这会使时间间隔更大的事情变得非常缓慢,因此您最好使用上述方法。
generate_series()
vpfxa7rd4#
公式为SELECT random() * (b - a) + a;,其中a是要生成随机数的最小数字,b是要生成随机数的最大数字。
SELECT random() * (b - a) + a;
a
b
SELECT random() * (timestamp '2023-09-01 20:00:00' - timestamp '2023-09-01 10:00:00') + timestamp '2023-09-01 10:00:00';
或
SELECT random() * ('2023-09-01 20:00:00'::timestamp - '2023-09-01 10:00:00'::timestamp) + '2023-09-01 10:00:00'::timestamp;
4条答案
按热度按时间liwlm1x91#
你可以用date/time operators做几乎所有的事情:
xa9qqrwz2#
我改编了@pozs的答案,因为我没有时间戳可以关闭。
90 days
是您想要的时间窗口,30 days
是将时间窗口推出去多远。这在通过作业而不是在设定的时间运行它时很有帮助。cclgggtu3#
你可以从一个随机整数(unix stamp)构建时间戳,例如:
如果您经常使用它,请将其 Package 在SQL函数中,因为即使尝试对其进行某种格式化,它也不是很可读。
另一种方法是从开始日期到结束日期使用
generate_series()
,按random()排序,但这会使时间间隔更大的事情变得非常缓慢,因此您最好使用上述方法。vpfxa7rd4#
公式为
SELECT random() * (b - a) + a;
,其中a
是要生成随机数的最小数字,b
是要生成随机数的最大数字。或