跳到主要内容

TIMESTAMPADD

描述

date_add 函数 作用一致 TIMESTAMPADD 函数用于向指定的日期时间值添加(或减去)指定单位的时间间隔,并返回计算后的日期时间值。该函数支持多种时间单位(如秒、分、时、日、周、月、年等),可灵活处理日期时间的偏移计算,负数间隔表示减去对应时间。

该函数与 mysql 中的 timestampadd 函数 行为一致

语法

TIMESTAMPADD(<unit>, <interval>, <date_or_time_expr>)

参数

参数说明
<unit>时间单位,指定要添加的时间单位,常见的值有 SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR
<interval>要添加的时间间隔,通常是一个整数,可以是正数或负数,表示添加或减去的时间长度
<date_or_time_expr>合法的目标日期,支持输入 date/datetime 类型具体 datetime 和 date 格式请查看 datetime 的转换date 的转换

返回值

返回值表示基础日期时间添加指定间隔后的结果。

  • 若输入为 date 类型,并且时间单位为 YEAR/MONTH/WEEK/DAY ,返回 date 类型,否则返回 datetime 类型。
  • 若输入为 datetime 类型,返回也是 datetime 类型。
  • 若计算结果超出 DATETIME 类型的有效范围(0000-01-01 00:00:00 至 9999-12-31 23:59:59.999999),抛出异常。
  • 若 <datetime_expr> 为无效日期(如 0000-00-00、2023-13-01)或 为不支持的单位,抛出异常。
  • 若任一参数为 NULL,返回 NULL。
  • 处理月份 / 年份时,会自动适配月末日期(如 2023-01-31 加 1 个月为 2023-02-28 或 2023-02-29,取决于是否闰年)。

举例

-- 添加1分钟
SELECT TIMESTAMPADD(MINUTE, 1, '2019-01-02') AS result;
+---------------------+
| result |
+---------------------+
| 2019-01-02 00:01:00 |
+---------------------+

-- 添加1周(7天)
SELECT TIMESTAMPADD(WEEK, 1, '2019-01-02') AS result;
+------------+
| result |
+------------+
| 2019-01-09 |
+------------+

-- 减去3小时
SELECT TIMESTAMPADD(HOUR, -3, '2023-07-13 10:30:00') AS result;
+---------------------+
| result |
+---------------------+
| 2023-07-13 07:30:00 |
+---------------------+

-- 月末加1个月(自动适配2月天数)
SELECT TIMESTAMPADD(MONTH, 1, '2023-01-31') AS result;
+------------+
| result |
+------------+
| 2023-02-28 |
+------------+

-- 跨年加1年
SELECT TIMESTAMPADD(YEAR, 1, '2023-12-31 23:59:59') AS result;
+---------------------+
| result |
+---------------------+
| 2024-12-31 23:59:59 |
+---------------------+

-- 无效单位
SELECT TIMESTAMPADD(MIN, 5, '2023-01-01') AS result;
ERROR 1105 (HY000): errCode = 2, detailMessage = Unsupported time stamp diff time unit: MIN, supported time unit: YEAR/MONTH/WEEK/DAY/HOUR/MINUTE/SECOND

---任意参数为 NULL
SELECT TIMESTAMPADD(YEAR,NULL, '2023-12-31 23:59:59') AS result;
+--------+
| result |
+--------+
| NULL |
+--------+

---单位不支持,无效
SELECT TIMESTAMPADD(YEAR,10000, '2023-12-31 23:59:59') AS result;
ERROR 1105 (HY000): errCode = 2, detailMessage = (10.16.10.3)[E-218]Operation years_add of 2023-12-31 23:59:59, 10000 out of range