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

时间:2014-08-12 15:52:04

标签: date amazon-redshift

我正在使用Postgresql(在Amazon Redshift上),我需要计算两个日期之间的差异,然后在公式中使用该值来计算比率,因此需要将日期差异转换为数字值,最好是浮点数或双精度值。

我有两个日期:2017年1月1日和2014年1月1日。我需要在天数中找到这两个日期之间的差异。

当我使用年龄函数时,我得到了1080天:

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

但是,由于age返回一个间隔,我需要使用数字结果,我使用EXTRACT转换最终值。我选择了纪元,因为我无法找到EXTRACT的任何其他值,这将产生两个日期之间的时间单位数。此公式产生1095.75天(除数是一天中的秒数):

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

为什么在使用年龄与使用提取物时,我会得到19.75天的差异?

3 个答案:

答案 0 :(得分:5)

你试过吗

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

两个date之间的差异是整数天数

答案 1 :(得分:1)

1080是每月30天(36天30天等于1080)所得到的数字,就像你使用justify_days(显式或DBMS隐式调用它)一样。你没有说如何你得到这个1080的数字,因为我相信持续时间通常会打印出类似3 years的东西,但这似乎是最可能的情况

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

在这两个中,我会采用后一种方法。

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

select dtend - dtstart from somewhere

答案 2 :(得分:0)

Redshift发行说明说,他们最近在功能之间发布了一个月的时间,这与功能之间的数字相似,如果这是你正在寻找的东西。 http://docs.aws.amazon.com/redshift/latest/dg/r_MONTHS_BETWEEN_function.html