DATE_SUB(date, INTERVAL expr unit) 是 MySQL 中的一个日期时间函数,用于从指定日期 date 中减去一个指定的时间间隔。

函数语法

DATE_SUB(date, INTERVAL expr unit)
  • date:这是原始日期或时间,表示从这个日期或时间开始进行操作。
  • expr:表示要减去的时间量,可以是一个数值,表示需要减去的具体时间长度。
  • unit:指定时间单位,通常是 SECONDMINUTEHOURDAYMONTHYEAR 等。

参数说明

  1. date:可以是一个日期时间类型字段(如 DATETIMEDATE 等),也可以是一个日期时间字符串。它表示你想要从中减去时间间隔的日期。
  2. expr:该值是要减去的时间的长度,它必须是一个数值表达式。例如,5 表示减去 5 个单位时间。
  3. unit:定义单位时间的种类,常见的单位包括:
    • SECOND:秒
    • MINUTE:分钟
    • HOUR:小时
    • DAY:天
    • WEEK:周
    • MONTH:月
    • QUARTER:季度
    • YEAR:年

返回值

该函数返回一个新的日期,表示从指定日期减去 expr 长度的 unit 单位后的结果。

使用示例

  1. 从当前日期减去 5 天SELECT DATE_SUB(CURRENT_DATE, INTERVAL 5 DAY); 这条查询将返回当前日期减去 5 天的日期。
  2. 从某个日期减去 3 个月SELECT DATE_SUB('2025-07-30', INTERVAL 3 MONTH); 返回:2025-04-30
  3. 从当前日期减去 2 年SELECT DATE_SUB(CURRENT_DATE, INTERVAL 2 YEAR); 返回当前日期减去 2 年的日期。
  4. 从当前日期时间减去 10 小时SELECT DATE_SUB(NOW(), INTERVAL 10 HOUR); 返回当前日期时间减去 10 小时的结果。
  5. 从日期中减去 30 秒SELECT DATE_SUB('2025-07-30 14:30:00', INTERVAL 30 SECOND); 返回:2025-07-30 14:29:30
  6. 从日期时间中减去 1 个季度SELECT DATE_SUB('2025-07-30', INTERVAL 1 QUARTER); 返回:2025-04-30

注意事项

  • 日期边界处理:当减去的日期间隔导致日期溢出时,MySQL 会自动进行日期的调整。例如,减去一个月的日期可能会自动调整到上个月的最后一天。
  • 返回结果类型:函数返回的类型是 DATE 或 DATETIME,具体取决于 date 参数的类型。

常见用途

  1. 计算过去的日期:常用于查找特定时间点之前的数据,例如查找 30 天前的订单或记录。
  2. 定期任务:在需要动态调整日期的情景下,例如定期进行备份、数据清理等任务时。
  3. 处理时间范围:可以用来处理各种报表中的时间范围,比如减去一个月或者一年,得到特定日期之前的时间。

示例综合应用

假设你有一个用户表,包含字段 created_at,表示用户创建时间。你想查询出过去 6 个月内注册的用户,可以使用以下 SQL 查询:

SELECT * FROM users
WHERE created_at >= DATE_SUB(CURRENT_DATE, INTERVAL 6 MONTH);

总结

DATE_SUB 函数非常强大,能够帮助我们进行灵活的日期运算,减去不同单位的时间。这对于数据分析、报表生成、定时任务等场景非常实用。通过合理使用 DATE_SUB,可以轻松计算出过去的日期、时间范围等。