我需要 0 到(10 天零 5 小时)之间的随机间隔时间。
我的代码:
select random() * (interval '10 days 5 hours')
from generate_series(1, 50)
除了一些奇怪的结果外,它的工作原理应该是这样的,例如:
0 years 0 mons 7 days 26 hours 10 mins 1.353353 secs
问题是 26 小时,应该不会超过 23 小时。而且我从来没有得到 10 天,这是我想要的。
最佳答案
Postgres 中的时间间隔非常灵活,因此大于 23 的小时值不一定滚动到天。使用 jusify_interval()
将它们返回到正常的“天数”和“小时数”。”
所以:
select justify_interval(random() * interval '10 day 5 hour')
from generate_series(1, 200)
order by 1 desc;
将为天、小时、分钟和秒返回具有适当值的值。
现在,为什么您没有得到超过 10 天的时间间隔?这是简单的随机性。如果将行数增加到 200(如上),您将看到它们(很有可能)。如果你多次运行代码,有时你会在那个范围内看不到任何东西;有时您会看到两个。
为什么?您问的是在 245 的范围内多久获得 240+ 的值。前 5 个小时占范围的 0.02%(约 1/50)。换句话说,50 个样本不够大——任何给定的 50 个随机值样本都可能丢失 1 个或更多 5 小时范围。
另外,如果没有 justify_interval()
,您很可能会错过那些,因为它们可能显示为 9 天,其中小时数大于 23。
关于sql - 在postgreSQL中获取随机时间间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53988729/