ADD_MONTHS
📄字数 907
👁️阅读量 加载中...
功能描述
在日期 expr1
基础上增加 expr2
个整数月份。
提示
如果运算后的结果超过了该月天数所表示的最大范围,则该日期会被调整为该月的最后一天;否则,返回值的天数与 expr1
的天数相同。
例如:ADD_MONTHS('2018-12-31'::DATE, 2)
,结果被调整为:2019-02-28
。
语法格式
sql
ADD_MONTHS(expr1, expr2)
输入参数
expr1
:起始日期,DATE
、DATETIME
或DATETIME WITH TIME ZONE
类型,或可以隐式转换为上述类型的其他类型。expr2
:增加的月份单位,NUMERIC
类型,整数或任何可以隐式转换为整数的值;可以为负数,表示减去的月份。
提示
- 因
NULL
无具体的类型,当第一个参数为NULL
时,会产生异常E10100 候选函数出现多义性
,需要手动为参数指定具体的形参类型,如:ADD_MONTHS(NULL::DATE, 1)
。 expr1
为动态参数(如预编译语句参数)或字符串类型(VARCHAR)时,服务端自动匹配参数类型,可使用CAST()
将expr1
转换为期望的类型,如:ADD_MONTHS(CAST('2025-10-10' AS DATE), 1)
。
输出结果
- 输出结果类型与第一个输入参数类型一致,任意输入参数 为
NULL
时,输出结果为NULL
。
示例
sql
-- 在'2020-12-31 23:59:59'时间上增加 1.4 个月
SQL> SELECT ADD_MONTHS('2020-12-31 23:59:59', 1.4), ADD_MONTHS('2020-12-31 23:59:59', CAST(1.4 AS NUMERIC));
+--------------------------+--------------------------+
| EXPR1 | EXPR2 |
+--------------------------+--------------------------+
| 2021-01-31 23:59:59.000 | 2021-01-31 23:59:59.000 |
+--------------------------+--------------------------+
-- 在'2018-12-31'时间上时间上增加 1.5 个月
SQL> SELECT ADD_MONTHS('2018-12-31', 1.5), ADD_MONTHS('2018-12-31', CAST(1.5 AS NUMERIC));
+--------------------------+--------------------------+
| EXPR1 | EXPR2 |
+--------------------------+--------------------------+
| 2019-01-31 00:00:00.000 | 2019-02-28 00:00:00.000 |
+--------------------------+--------------------------+
-- 在'2018-4-30'时间上增加 1 个月和减少 2 个月
SQL> SELECT ADD_MONTHS('2018-4-30', 1), ADD_MONTHS('2018-4-30', -2);
+--------------------------+--------------------------+
| EXPR1 | EXPR2 |
+--------------------------+--------------------------+
| 2018-05-30 00:00:00.000 | 2018-02-28 00:00:00.000 |
+--------------------------+--------------------------+