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

问题描述:

我想在日期中添加1个日历月,而忽略当月的天数。即add_month('2015-02-23')返回2015-03-23add_month('2015-05-23')回报2015-06-23将1个日历月的时间间隔添加到日期

好像我可以使用INTERVAL '1 month'要做到这一点,但我很惊讶地发现,每当我这样做,它增加了30天我的输入即功能一样INTERVAL '30 days'。这也发生在你身上吗?我应该做些什么来增加1个日历月?

例子:

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

回报2015-05-23

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

回报2015-06-22

+0

这似乎是具体的Vertica的行为。至少,它在Postgres 9.3上正常工作。 –

此行为是由于Vertica在SQL 2008上建模造成的,其中1 MONTH是静态的30天,而不是“智能月”。

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