当然!下面我帮你详细梳理 MySQL 的 DATE_SUB()
函数,从概念、语法到使用示例,方便理解和实战应用。
1. 函数概述
DATE_SUB()
是 MySQL 中用于对日期进行减法运算的函数。它可以在一个日期或日期时间值上减去指定的时间间隔(如天、月、年、小时、分钟等),返回计算后的新日期。
- 常用于:
- 查询某段时间之前的数据
- 计算有效期、过期时间
- 数据报表和统计
2. 语法
DATE_SUB(date, INTERVAL expr unit)
- date:要操作的日期或日期时间值(
DATE
、DATETIME
、TIMESTAMP
) - expr:整数,表示要减去的时间量
- unit:时间单位(支持多种,详见下表)
常用时间单位
单位 | 描述 |
---|---|
SECOND | 秒 |
MINUTE | 分钟 |
HOUR | 小时 |
DAY | 天 |
WEEK | 周 |
MONTH | 月 |
QUARTER | 季度 |
YEAR | 年 |
MICROSECOND | 微秒 |
3. 使用示例
示例 1:减去天数
SELECT DATE_SUB('2025-10-09', INTERVAL 7 DAY) AS result;
结果:
2025-10-02
解释:从 2025-10-09
减去 7 天。
示例 2:减去月份
SELECT DATE_SUB('2025-10-09', INTERVAL 3 MONTH) AS result;
结果:
2025-07-09
解释:从 2025-10-09
减去 3 个月。
示例 3:减去年份
SELECT DATE_SUB('2025-10-09', INTERVAL 2 YEAR) AS result;
结果:
2023-10-09
解释:从 2025-10-09
减去 2 年。
示例 4:减去小时、分钟、秒
SELECT DATE_SUB('2025-10-09 12:30:45', INTERVAL 2 HOUR) AS result;
SELECT DATE_SUB('2025-10-09 12:30:45', INTERVAL 15 MINUTE) AS result;
SELECT DATE_SUB('2025-10-09 12:30:45', INTERVAL 30 SECOND) AS result;
结果:
2025-10-09 10:30:45
2025-10-09 12:15:45
2025-10-09 12:30:15
示例 5:结合 NOW()
动态获取过去日期
-- 获取过去 30 天的记录
SELECT * FROM orders
WHERE order_date >= DATE_SUB(NOW(), INTERVAL 30 DAY);
解释:查询过去 30 天内的订单。
4. 与 DATE_ADD()
对比
DATE_SUB()
:减去时间DATE_ADD()
:加上时间
语法几乎相同,只是运算方向相反:
SELECT DATE_ADD('2025-10-09', INTERVAL 7 DAY); -- 结果 2025-10-16
5. 注意事项
- 单位大小写不敏感:
DAY
、day
、Day
都可以 - 负数间隔可用
DATE_ADD()
:SELECT DATE_ADD('2025-10-09', INTERVAL -7 DAY); -- 等同于 DATE_SUB
- 只支持整数间隔,不能直接使用小数(如 1.5 DAY)
- 返回类型:与输入类型一致(DATE 或 DATETIME)
总结:DATE_SUB()
是 MySQL 日期运算中最常用的函数之一,灵活支持天、月、年等单位,常用于时间范围查询、过期时间计算、统计报表等场景。
发表回复