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

问题描述:

假设我给了两个日期,如果差别是一个月,那么它应该显示为30天。甚至几个月也需要转换成天 我已经试过了年龄(日期,现在()::时间戳没有时区)但它是给予月 - 日 - 年的格式。例如:10日24日13:57:40.5265。但我需要以下方法。 例如,如果有两个月的差异,那么我需要输出为60天。如何计算postgres sql查询中两个日期之间的日期。

+0

'CURRENT_DATE - ÿ our_timestamp_column :: date' –

+0

你到目前为止尝试过什么?你能显示一些代码吗? –

+0

但是二月和三月同一天的差别是28或29天? 3月和4月同一天的差别是31天。 即使你提取的天数你不会得到30天的每个月到每个月的比较。 –

不要使用日期/时间算术的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

+0

'age()'返回'interval'而不是“符号”结果。这是一种数据类型,可以很容易地用于计算,绝对不是**“无意义的” –

+0

@a_horse_with_no_name [来自文档](https://www.postgresql.org/docs/current/static/functions -datetime.html)*年龄(时间戳,时间戳):减去参数,产生一个使用年和月的“符号”结果,而不仅仅是几天*,从技术上说它的类型是'interval',但是给定它的(函数的)语义和一般的'时间间隔'正当性规则,它并不意味着用于日期/时间算术(可能在某些边缘情况下)。 – pozs

这两者都会给出结果。

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); 
+0

谢谢你正在工作正常 – suresh