ADDDATE
📄字数 1.5K
👁️阅读量 加载中...
功能描述
在日期或时间值上增加时间间隔(如天数、小时、分钟等)。
语法格式
sql
ADDDATE(expr1, INTERVAL expr2 unit)
ADDDATE(expr1, expr3)输入参数
expr1:日期或时间值,DATE、TIME、DATETIME、TIME WITH TIME ZONE或DATETIME WITH TIME ZONE类型,或能隐式转换为上述类型的其他类型。expr2:增加的时间间隔值,INTERVAL unit是时间间隔类型中的关键字,其中unit表示时间间隔的单位,INTERVAL unit参数的信息,包括unit单位的完整列表,请参考 时间间隔类型。值可以为负数,表示减去的时间间隔。当以INTERVAL形式传入第二个参数时,ADDDATE()函数和 DATE_ADD() 函数相等。expr3:增加的天数,INTEGER类型,或能隐式转换为INTEGER类型的其他类型。
提示
- 因
NULL无具体的类型,所以当任意参数为NULL时,可能会产生异常E10100 候选函数出现多义性,需要手动为参数指定具体的类型,如:ADDDATE('2025-10-30', NULL::INTERVAL DAY)。 expr1为动态参数(如预编译语句参数)或字符串类型(VARCHAR)时,服务端自动匹配参数类型,可使用CAST()将expr1转换为期望的类型,如:ADDDATE(CAST('2025-10-10' AS DATE), 1)。SELECT ADDDATE(expr1, expr3)的结果等价于SELECT ADDDATE(expr1, INTERVAL expr3 DAY)。
输出结果
输出结果类型由输入参数类型决定,任意输入参数为 NULL 时,输出结果为 NULL。
输出结果和输入参数的对应关系如下:
| 第一个参数的类型 | 第二个参数的类型(unit关键字) | 输出结果 |
|---|---|---|
| DATE | DAY | DATE |
| DATE | MONTH | DATE |
| DATE | YEAR | DATE |
| DATE | [注1] | DATETIME |
| DATE | INTEGER[注2] | DATE |
| TIME/TIME WITH TIME ZONE | SECOND | TIME/TIME WITH TIME ZONE |
| TIME/TIME WITH TIME ZONE | MINUTE | TIME/TIME WITH TIME ZONE |
| TIME/TIME WITH TIME ZONE | HOUR | TIME/TIME WITH TIME ZONE |
| TIME/TIME WITH TIME ZONE | DAY | TIME/TIME WITH TIME ZONE |
| DATETIME/DATETIME WITH TIME ZONE | [注3] | DATETIME/DATETIME WITH TIME ZONE |
提示
[注1]表示包含DAY、MONTH和YEAR关键字外的其他INTERVAL类型。[注2]不是INTERVAL unit类型的关键字,只表示一个INTEGER类型。ADDDATE(expr1, INTEGER)的结果等价于ADDDATE(expr1, INTERVAL INTEGER DAY)。[注3]表示任意INTERVAL类型。
示例
sql
-- 在'2020-12-31 23:59:59'时间上增加 1 秒
SQL> SELECT ADDDATE('2020-12-31 23:59:59', INTERVAL '1' SECOND);
+--------------------------+
| EXPR1 |
+--------------------------+
| 2021-01-01 00:00:00.000 |
+--------------------------+
-- 在'2018-12-31'时间上增加 10 天
SQL> SELECT ADDDATE('2018-12-31', INTERVAL '10' DAY);
+--------------------------+
| EXPR1 |
+--------------------------+
| 2019-01-10 00:00:00.000 |
+--------------------------+
-- 在'2018-12-31'时间上增加 10 天
SQL> SELECT ADDDATE('2018-12-31', '10');
+-------------+
| EXPR1 |
+-------------+
| 2019-01-10 |
+-------------+
-- 在'2010-12-31 23:59:59'时间上增加 1 分 1 秒
SQL> SELECT ADDDATE('2010-12-31 23:59:59', INTERVAL '1:1' MINUTE TO SECOND);
+--------------------------+
| EXPR1 |
+--------------------------+
| 2011-01-01 00:01:00.000 |
+--------------------------+