将 1 个日历月的间隔添加到日期
Adding an interval of 1 calendar month to a date
我想在日期中加上 1 个日历月,忽略该月的天数。即 add_month('2015-02-23')
returns 2015-03-23
和 add_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)
我想在日期中加上 1 个日历月,忽略该月的天数。即 add_month('2015-02-23')
returns 2015-03-23
和 add_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)