将 1 个日历月的间隔添加到日期

Adding an interval of 1 calendar month to a date

我想在日期中加上 1 个日历月,忽略该月的天数。即 add_month('2015-02-23') returns 2015-03-23add_month('2015-05-23') returns 2015-06-23

似乎我可以使用 INTERVAL '1 month' 来做到这一点,但我惊讶地发现每当我这样做时,我的输入都会增加 30 天,即在功能上与 INTERVAL '30 days' 相同。这也发生在你身上吗?我应该怎么做才能增加 1 个日历月?

示例:

SELECT DATE('2015-04-23') + INTERVAL '1 month'

returns 2015-05-23

SELECT DATE('2015-05-23') + INTERVAL '1 month'

returns 2015-06-22!

此行为是由于 Vertica 以 SQL 2008 为模型,其中 1 MONTH 是静态的 30 天,而不是 "smart month."

dbadmin=> SELECT INTERVAL '1 MONTH';
 ?column?
----------
 30
(1 row)

为了获得所需的行为,您应该使用 INTERVALYM:

dbadmin=> SELECT INTERVALYM '1 MONTH';
 ?column?
----------
 0-1
(1 row)

dbadmin=> SELECT DATE('2015-05-23') + INTERVALYM '1 MONTH';
      ?column?
---------------------
 2015-06-23 00:00:00
(1 row)

Read more