我做错了什么?
SELECT DATE_PART('month', '2018-05-31'::timestamp - '2018-02-24'::timestamp);
它返回0!每时每刻。为什么呢?
我在PostgreSQL 10.4上。
答案 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天。