好的!下面是 MySQL 中 DATE_SUB()
函数的详细讲解,包括语法、参数、用法示例和注意事项。
DATE_SUB()
函数详解
DATE_SUB()
用于从指定的日期中减去一个时间间隔,返回新的日期或日期时间值。
1. 函数语法
DATE_SUB(date, INTERVAL expr unit)
date
:要操作的日期或日期时间表达式,可以是DATE
、DATETIME
或TIMESTAMP
类型。expr
:整数表达式,表示要减去的时间数量。unit
:时间单位,指定expr
表示的时间类型。
2. 支持的时间单位(unit)
单位名 | 说明 | 示例表达式 |
---|---|---|
MICROSECOND | 微秒 | INTERVAL 100 MICROSECOND |
SECOND | 秒 | INTERVAL 30 SECOND |
MINUTE | 分钟 | INTERVAL 5 MINUTE |
HOUR | 小时 | INTERVAL 2 HOUR |
DAY | 天 | INTERVAL 10 DAY |
WEEK | 星期(7 天) | INTERVAL 3 WEEK |
MONTH | 月 | INTERVAL 1 MONTH |
QUARTER | 季度(3 个月) | INTERVAL 1 QUARTER |
YEAR | 年 | INTERVAL 1 YEAR |
SECOND_MICROSECOND | 秒 + 微秒 | INTERVAL '10:500' SECOND_MICROSECOND |
MINUTE_MICROSECOND | 分 + 微秒 | INTERVAL '10:500' MINUTE_MICROSECOND |
MINUTE_SECOND | 分 + 秒 | INTERVAL '10:30' MINUTE_SECOND |
HOUR_MICROSECOND | 时 + 微秒 | INTERVAL '10:500' HOUR_MICROSECOND |
HOUR_SECOND | 时 + 秒 | INTERVAL '10:30' HOUR_SECOND |
HOUR_MINUTE | 时 + 分 | INTERVAL '10:30' HOUR_MINUTE |
DAY_MICROSECOND | 天 + 微秒 | INTERVAL '10 10:500' DAY_MICROSECOND |
DAY_SECOND | 天 + 秒 | INTERVAL '10 10:30' DAY_SECOND |
DAY_MINUTE | 天 + 分 | INTERVAL '10 10:30' DAY_MINUTE |
DAY_HOUR | 天 + 小时 | INTERVAL '10 10' DAY_HOUR |
3. 详细示例
-- 从当前日期减去10天
SELECT DATE_SUB(CURDATE(), INTERVAL 10 DAY);
-- 从当前时间减去5小时
SELECT DATE_SUB(NOW(), INTERVAL 5 HOUR);
-- 减去2个月
SELECT DATE_SUB('2023-08-06', INTERVAL 2 MONTH);
-- 减去1年3个月
SELECT DATE_SUB('2023-08-06', INTERVAL 15 MONTH);
-- 结合时间减去1天5小时30分钟
SELECT DATE_SUB('2023-08-06 12:00:00', INTERVAL '1 05:30' DAY_HOUR);
-- 减去90秒
SELECT DATE_SUB('2023-08-06 12:00:00', INTERVAL 90 SECOND);
4. 与 DATE_ADD()
对比
DATE_ADD()
是加时间间隔,DATE_SUB()
是减时间间隔- 语法完全相同,区别只在于加或减
SELECT DATE_ADD('2023-08-06', INTERVAL 1 DAY);
SELECT DATE_SUB('2023-08-06', INTERVAL 1 DAY);
5. 注意事项
expr
必须是整数或符合时间格式的字符串- 如果日期参数是字符串,MySQL 会自动尝试解析
- 如果结果日期超出范围,会返回 NULL
- 对
DATETIME
类型,时间单位可以包含时分秒
6. 简单演示
mysql> SELECT NOW();
+---------------------+
| NOW() |
+---------------------+
| 2025-08-06 09:00:00 |
+---------------------+
mysql> SELECT DATE_SUB(NOW(), INTERVAL 1 DAY);
+---------------------------+
| DATE_SUB(NOW(), INTERVAL 1 DAY) |
+---------------------------+
| 2025-08-05 09:00:00 |
+---------------------------+
如果你需要,我可以帮你写一个包含多种用法的 SQL 脚本,或者帮你写 DATE_SUB
的等效函数示例,或者给你做个时间计算的可视化小工具。你需要吗?
发表回复