当然!下面我帮你详细梳理 MySQL 的 DATE_SUB() 函数,从概念、语法到使用示例,方便理解和实战应用。


1. 函数概述

DATE_SUB() 是 MySQL 中用于对日期进行减法运算的函数。它可以在一个日期或日期时间值上减去指定的时间间隔(如天、月、年、小时、分钟等),返回计算后的新日期。

  • 常用于:
    • 查询某段时间之前的数据
    • 计算有效期、过期时间
    • 数据报表和统计

2. 语法

DATE_SUB(date, INTERVAL expr unit)

  • date:要操作的日期或日期时间值(DATEDATETIMETIMESTAMP
  • 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. 注意事项

  1. 单位大小写不敏感DAYdayDay 都可以
  2. 负数间隔可用 DATE_ADD()SELECT DATE_ADD('2025-10-09', INTERVAL -7 DAY); -- 等同于 DATE_SUB
  3. 只支持整数间隔,不能直接使用小数(如 1.5 DAY)
  4. 返回类型:与输入类型一致(DATE 或 DATETIME)

总结:
DATE_SUB() 是 MySQL 日期运算中最常用的函数之一,灵活支持天、月、年等单位,常用于时间范围查询、过期时间计算、统计报表等场景。