ADD_MONTHS
将指定的月数添加到日期并以 DATE
的形式返回总和。通常,ADD_MONTHS 返回与开始日期具有相同日部分的日期。例如:
=> SELECT ADD_MONTHS ('2015-09-15'::date, -2) "2 Months Ago";
2 Months Ago
--------------
2015-07-15
(1 row)
有两个例外:
-
如果开始日期的日部分大于结果月份的最后一天,则 ADD_MONTHS 返回结果月份的最后一天。例如:
=> SELECT ADD_MONTHS ('31-Jan-2016'::TIMESTAMP, 1) "Leap Month"; Leap Month ------------ 2016-02-29 (1 row)
-
如果开始日期的日部分是该月的最后一天,并且结果月份的天数比开始日期月份的天数多,则 ADD_MONTHS 返回结果月份的最后一天。例如:
=> SELECT ADD_MONTHS ('2015-09-30'::date,-1) "1 Month Ago"; 1 Month Ago ------------- 2015-08-31 (1 row)
行为类型
语法
ADD_MONTHS ( start‑date, num‑months );
参数
- start‑date
- 要处理的日期,是求值结果具有以下一种数据类型的表达式:
-
DATE
-
TIMESTAMP
-
TIMESTAMPTZ
-
- num‑months
- 整数表达式,指定要添加到 start‑date 中或从中减去的月数。
示例
在当前日期上加一个月:
=> SELECT CURRENT_DATE Today;
Today
------------
2016-05-05
(1 row)
VMart=> SELECT ADD_MONTHS(CURRENT_TIMESTAMP,1);
ADD_MONTHS
------------
2016-06-05
(1 row)
从当前日期减去四个月:
=> SELECT ADD_MONTHS(CURRENT_TIMESTAMP, -4);
ADD_MONTHS
------------
2016-01-05
(1 row)
2016 年 1 月 31 日加一个月:
=> SELECT ADD_MONTHS('31-Jan-2016'::TIMESTAMP, 1) "Leap Month";
Leap Month
------------
2016-02-29
(1 row)
以下示例将时区设置为 EST;然后它将 24 个月添加到指定 PST 时区的 TIMESTAMPTZ,因此 ADD_MONTHS
会考虑时间变化:
=> SET TIME ZONE 'America/New_York';
SET
VMart=> SELECT ADD_MONTHS('2008-02-29 23:30 PST'::TIMESTAMPTZ, 24);
ADD_MONTHS
------------
2010-03-01
(1 row)