sql - 在postgreSQL中获取随机时间间隔

标签 sql postgresql intervals

我需要 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/

相关文章:

sql - 在sql表中保存M×N矩阵的推荐方法是什么

PostgreSQL - 按 UUID 版本 1 时间戳排序

ruby-on-rails - Heroku 上的多模式 Postgres

oracle - 需要帮助将 Oracle 触发器转换为 PostgreSQL

swift - 在 Swift 2.x 中迭代闭区间

java - 如何使我的 java 程序能够持续运行并定期执行?

mysql - 已使用 count 和 group by 时的不同值

mysql - SQL Server SELECT 以 Parameter 开头的行

sql - 如何提高 Oracle SQL 中两个 SCD2 表的 JOIN 性能

c++ - 为什么 boost::numeric::interval::widen 的行为与手动应用相同的逻辑不同