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

sel*_*yth 3 vertica

我想在一个日期添加1个日历月,忽略该月的天数.即add_month('2015-02-23')退货2015-03-23add_month('2015-05-23')退货2015-06-23

好像我可以INTERVAL '1 month'用来做这个,但我很惊讶地发现每当我这样做时,它会增加30天的输入,即功能相同INTERVAL '30 days'.这也会发生在你身上吗?我该怎么做才能增加1个日历月?

例子:

SELECT DATE('2015-04-23') + INTERVAL '1 month'
Run Code Online (Sandbox Code Playgroud)

回来的2015-05-23 时候

SELECT DATE('2015-05-23') + INTERVAL '1 month'
Run Code Online (Sandbox Code Playgroud)

回来了2015-06-22!

Ker*_*mit 7

此行为是由于Vertica在SQL 2008上建模,其中1 MONTH是静态的30天,而不是"智能月份".

dbadmin=> SELECT INTERVAL '1 MONTH';
 ?column?
----------
 30
(1 row)
Run Code Online (Sandbox Code Playgroud)

为了获得所需的行为,您应该使用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)
Run Code Online (Sandbox Code Playgroud)

阅读更多