在Postgresql中,使用age和extract计算两个日期之间的差异会得到不同的结果

1 人关注

我在使用Postgresql(在Amazon Redshift上),我需要计算两个日期之间的差异,然后在一个公式中使用该值来计算一个比率,所以日期差异需要被翻译成一个数值,最好是浮点数或双精度。

我有两个日期。1/1/2017和1/1/2014。 我需要找到这两个日期之间的天数差。

当我使用age函数时,我得到1080天。

select age('2017-01-01','2014-01-01')

然而,由于age返回的是一个区间,而我需要处理一个数字结果,所以我使用EXTRACT来转换最终值。 我选择了epoch,因为我没能找到EXTRACT的其他值,可以得到两个日期之间的时间单位数。 这个公式得出的结果是1095.75天(除数是一天中的秒数)。

select extract(epoch from age('2017-01-01','2014-01-01'))/86400

为什么我在使用age和使用extract时得到的是19.75天的差异?

date
amazon-redshift
Ryan
Ryan
发布于 2014-08-12
3 个回答
Clodoaldo Neto
Clodoaldo Neto
发布于 2014-12-13
0 人赞同

你是否尝试过

select '2017-01-01'::date - '2014-01-01'::date;

两个dates之间的差异是整数天数。

paxdiablo
paxdiablo
发布于 2014-12-13
已采纳
0 人赞同

1080是你会得到的数字,如果每个月都是30天(36个月乘以30天等于1080),如果你使用 justify_days (无论是显式还是DBMS隐式调用)。你没有说你是 如何 得到这个1080的数字的,因为我相信持续时间通常只是打印出类似 3 years ,但这似乎是最有可能的情况。

1095.75似乎是更正确的数字,是365.25天乘以3年。

在这两种方法中,我会选择后一种方法。

虽然,正如在 http://www.postgresql.org/docs/8.1/static/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT, 计算两个日期类型之间的差异应该产生天数。