如何计算postgres sql查询中两个日期之间的天数。

时间:2017-04-07 10:21:38

标签: sql postgresql date-arithmetic

假设我已经给出了两个日期,如果差异是一个月那么它应该显示为30天。甚至几个月也需要转换为几天 我尝试过age(date,now():: timestamp没有时区),但是它给出了months-dates-years格式。例如:10个星期二24天13:57:40.5265。但我需要遵循以下方式。 例如,如果有两个月的差异,那么我需要60天的输出。

2 个答案:

答案 0 :(得分:2)

不要使用age()函数进行日期/时间算术。它只有returns "symbolic" results(对于人类表示来说足够好,但对于日期/时间计算几乎毫无意义;与标准差异相比)。

标准difference operator (-)会返回datetimestamptimestamp with time zone的基于日期的结果(前者将天数作为int返回,后两者返回基于日期的interval s):

从基于日期的时间间隔开始,您可以使用extract()函数提取日期:

select current_date - '2017-01-01',
       extract(day from now()::timestamp - '2017-01-01 00:00:00'),
       extract(day from now()            - '2017-01-01 00:00:00Z');

http://rextester.com/RBTO71933

答案 1 :(得分:0)

这两个都会给出结果。

select make_interval(days => ((extract(epoch from '2016-04-10'::date) - extract(epoch from '2016-02-10'::date))/(60*60*24))::integer)::text;

select format('%1$s days', ((extract(epoch from '2016-04-10'::date) - extract(epoch from '2016-02-10'::date))/(60*60*24))::integer);