【发布时间】:2019-12-19 19:12:06
【问题描述】:
我正在使用 Postgresql 中的一些间隔,但我不确定我是否理解间隔的工作原理。
我想要做的是将间隔转换为秒。 所以我有以下价值观:
select extract ('epoch' from '1 year'::INTERVAL);
产生数字 31557600。如果我们将这个数字除以 (60*60*24),即一天中的秒数,我们得到 365。
所以在 postgresql 间隔中的一年有 365天。
select extract ('epoch' from '1 month'::INTERVAL);
产生数字 2592000。如果我们将此数字除以 (60*60*24),我们得到 30。
所以 postgresql 间隔中的一个月有 30 天。
所以按照这个逻辑,我试图计算以下间隔中的秒数:
select extract ('epoch' from '2 year 2 month 1 day 10 hour 5 minute'::INTERVAL);
我正在使用以下公式来计算上述查询的结果:
SELECT (years * 365 * 24 * 3600) + (months * 30 * 24 * 3600) + (days * 24 * 3600) + (hours * 3600) + (minutes * 60);
当我们用值替换变量时,表达式如下:
SELECT (2 * 365 * 24 * 3600) + (2 * 30 * 24 * 3600) + (1 * 24 * 3600) + (10 * 3600) + (5 * 60);
我遇到的问题是第一个查询的结果 (SELECT extract...) 产生结果 68421900 而来自上面公式的查询产生结果 68378700.
据我了解,结果应该是相同的,但结果之间存在 12 小时(43200 秒)的差异。为什么会这样?
重要的是要注意,如果我从间隔中删除年份,我会从两个查询中得到相同的结果,所以我想这与年份有关。
【问题讨论】: