ADD_MONTHS 函数
ADD_MONTHS 会将指定的月数添加到日期或时间戳值或表达式中。DATEADD 函数提供了类似的功能。
语法
ADD_MONTHS( {date | timestamp}, integer)
参数
- date | timestamp
-
数据类型为
DATE
或TIMESTAMP
的列,或一个隐式计算结果为DATE
或TIMESTAMP
类型的表达式。如果日期是该月的最后一天,或者如果产生的月份较短,则函数在结果中返回该月的最后一天。对于其他日期,结果包含与日期表达式相同的日期编号。 - integer
-
数据类型
INTEGER
的值。使用负数从日期中减去月份。
返回类型
TIMESTAMP
示例
以下查询使用 TRUNC 函数内的 ADD_MONTHS 函数。TRUNC 函数从 ADD_MONTHS 的结果中删除一天中的时间。ADD_MONTHS 函数会为 CALDATE 列中的每个值添加 12 个月。CALDATE 列中的值是日期。
select distinct trunc(add_months(caldate, 12)) as calplus12, trunc(caldate) as cal from date order by 1 asc;
calplus12 | cal ------------+------------ 2009-01-01 | 2008-01-01 2009-01-02 | 2008-01-02 2009-01-03 | 2008-01-03 ... (365 rows)
以下示例使用 ADD_MONTHS 函数给时间戳 加上 1 个月。
select add_months('2008-01-01 05:07:30', 1);
add_months --------------------- 2008-02-01 05:07:30
以下示例演示 ADD_MONTHS 函数在具有不同天数的月份的日期上运行时的行为。此示例说明该函数如何处理在 3 月 31 日的基础上再加上 1 个月以及在 4 月 30 日的基础上再加上 1 个月的情况。4 月有 30 天,所以在 3 月 31 日的基础上再加上 1 个月,结果是 4 月 30 日。5 月有 31 天,所以在 4 月 30 日的基础上再加上 1 个月,结果是 5 月 31 日。
select add_months('2008-03-31',1);
add_months --------------------- 2008-04-30 00:00:00
select add_months('2008-04-30',1);
add_months --------------------- 2008-05-31 00:00:00