从间隔中提取月数

时间:2018-05-22 10:39:00

标签: sql postgresql date

我做错了什么?

SELECT DATE_PART('month', '2018-05-31'::timestamp - '2018-02-24'::timestamp);

它返回0!每时每刻。为什么呢?

我在PostgreSQL 10.4上。

2 个答案:

答案 0 :(得分:3)

你有:

t=# select '2018-05-31'::timestamp - '2018-02-24'::timestamp;
 ?column?
----------
 96 days
(1 row)

这样:

t=# SELECT DATE_PART('day', '2018-05-31'::timestamp - '2018-02-24');
 date_part
-----------
        96
(1 row)

尝试:

t=# SELECT DATE_PART('month', justify_interval('2018-05-31'::timestamp - '2018-02-24'::timestamp));
 date_part
-----------
         3
(1 row)

我认为在使用date_part之前需要证明间隔是合理的 https://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT,要清楚 - 真实......

答案 1 :(得分:3)

Vao Tsun解释了原因。

一个很好的解决方案可能是使用age函数,该函数格式化年,月和日的间隔:

SELECT date_part('month', age('2018-05-31'::timestamp, '2018-02-24'::timestamp));

 date_part 
-----------
         3
(1 row)

这将返回更准确的结果,因为它不必假设每个月都有30天。