我正在使用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天的差异?
答案 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