MySQL DATE_SUB() 函数使用指南

MySQL DATE_SUB() 函数在指定的日期/时间上减去指定到时间间隔加并返回新的日期/时间。

DATE_SUB() 语法

这是 MySQL DATE_SUB() 函数的语法:

DATE_SUB(date, INTERVAL value unit)

参数

date
必需的。需要操作的日期。
days
必需的。在 date 上减去的天数。
value
必需的。时间/日期间隔。正数和负数都是允许的。
unit
必需的。时间/日期间隔的单位。

时间/日期间隔的单位可以是以下值中的一个:

  • MICROSECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • MONTH
  • QUARTER
  • YEAR
  • SECOND_MICROSECOND
  • MINUTE_MICROSECOND
  • MINUTE_SECOND
  • HOUR_MICROSECOND
  • HOUR_SECOND
  • HOUR_MINUTE
  • DAY_MICROSECOND
  • DAY_SECOND
  • DAY_MINUTE
  • DAY_HOUR
  • YEAR_MONTH

返回值

DATE_SUB() 函数指定的日期/时间添加指定的时间间隔,并返回一个新的日期/时间。DATE_SUB() 函数的返回值和参数有关:

  • 如果 date 参数是 DATE 类型,并且时间间隔为 YEAR, MONTH 或者 DAY,返回 DATE
  • 如果 date 参数是 DATE 类型,并且时间间隔为 HOURS, MINUTES 或者 SECONDS,返回 DATETIME
  • 如果 date 参数是 DATETIME 类型,返回 DATETIME
  • 如果 date 参数是 TIME 类型,并且时间间隔为 YEAR, MONTH 或者 DAY,返回 DATETIME
  • 如果 date 参数是 TIME 类型,并且计算只涉及 HOURS, MINUTESSECONDS 部分,返回 TIME。(开始于 MySQL 8.0.28)
  • 其他情况下返回字符串。

DATE_SUB() 示例

这里是几个 DATE_SUB() 函数的示例。

示例 1

SELECT
    DATE_SUB('2020-06-10', 10),
    DATE_SUB('2020-06-10', -10)\G
 DATE_SUB('2020-06-10', 10): 2020-05-31
DATE_SUB('2020-06-10', -10): 2020-06-20

示例 2

SELECT
    DATE_SUB('2020-06-10', INTERVAL 10 DAY),
    DATE_SUB('2020-06-10', INTERVAL 10 HOUR)\G
 DATE_SUB('2020-06-10', INTERVAL 10 DAY): 2020-05-31
DATE_SUB('2020-06-10', INTERVAL 10 HOUR): 2020-06-09 14:00:00

示例 3

SELECT
    DATE_SUB('2020-06-10 10:00:00', INTERVAL 10 HOUR),
    DATE_SUB('2020-06-10 10:00:00', INTERVAL 10 MINUTE)\G
  DATE_SUB('2020-06-10 10:00:00', INTERVAL 10 HOUR): 2020-06-10 00:00:00
DATE_SUB('2020-06-10 10:00:00', INTERVAL 10 MINUTE): 2020-06-10 09:50:00

示例 4

SELECT
    DATE_SUB(CURDATE(), INTERVAL 10 HOUR),
    DATE_SUB(NOW(), INTERVAL 10 MINUTE)\G
DATE_SUB(CURDATE(), INTERVAL 10 HOUR): 2022-04-10 14:00:00
  DATE_SUB(NOW(), INTERVAL 10 MINUTE): 2022-04-11 08:56:43

这里,我们使用了 CURDATE() 函数返回当前的日期,使用 NOW() 函数返回当前日期时间。