如何计算postgres sql查询中两个日期之间的日期。
假设我给了两个日期,如果差别是一个月,那么它应该显示为30天。甚至几个月也需要转换成天 我已经试过了年龄(日期,现在()::时间戳没有时区)但它是给予月 - 日 - 年的格式。例如:10日24日13:57:40.5265。但我需要以下方法。 例如,如果有两个月的差异,那么我需要输出为60天。如何计算postgres sql查询中两个日期之间的日期。
不要使用日期/时间算术的age()
函数。它只有returns "symbolic" results(这对于人类表示来说足够好,但对于日期/时间计算几乎没有意义;与标准差相比)。
标准difference operator (-
)回报以天为结果都date
,timestamp
和timestamp 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');
'age()'返回'interval'而不是“符号”结果。这是一种数据类型,可以很容易地用于计算,绝对不是**“无意义的” –
@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);
谢谢你正在工作正常 – suresh
'CURRENT_DATE - ÿ our_timestamp_column :: date' –
你到目前为止尝试过什么?你能显示一些代码吗? –
但是二月和三月同一天的差别是28或29天? 3月和4月同一天的差别是31天。 即使你提取的天数你不会得到30天的每个月到每个月的比较。 –