在评估间隔时,postgres 似乎将一个月准确定义为 30 天,即使一个月有 31 天:
select age('2021-03-31 23:59:59.999', '2021-03-01'::date)
回报:30 days 23:59:59.999
在 3 月的情况下不到 1 个月。
然而:
select age('2021-03-31 23:59:59.999', '2021-03-01'::date) <= '1 month'
评估为false
。
一个(不是很干净的)解决方案是:
select age('2021-03-31 23:59:59.999', '2021-03-01'::date) <= case (select DATE_PART('days', DATE_TRUNC('month', '2021-03-31'::Date) + '1 MONTH'::interval - '1 DAY'::INTERVAL))
when 31 then '31 days'::interval when 30 then '30 days'::interval
when 29 then '29 days'::interval else '28 days'::interval end
我的问题分为两部分:
- 为什么 postgresql 将一个月定义为 30 天,特别是在我将两个日期作为内置函数的输入的情况下?
- 我的问题有比上面的代码片段更干净的解决方案吗?