mysql DATE_SUB函数 对日期或时间进行减法运算
MySQL 的 DATE_SUB()
函数用于对日期或时间进行减法运算,返回一个经过计算的新日期 / 时间值。它通常用于从指定日期中减去一定的时间间隔(如天数、小时、月份等)。
语法
sql
DATE_SUB(date, INTERVAL expr unit)
date
:要进行运算的基础日期 / 时间,可以是日期字符串、DATE
类型或DATETIME
类型的值。expr
:要减去的数值(可以是正数或负数,若为负数则相当于加法)。unit
:时间单位,如DAY
、MONTH
、HOUR
等。
常用时间单位
支持的 unit
参数包括:MICROSECOND
(微秒)、SECOND
(秒)、MINUTE
(分钟)、HOUR
(小时)、DAY
(天)、WEEK
(周)、MONTH
(月)、QUARTER
(季度)、YEAR
(年)等。
示例
假设当前日期为 2023-10-05
,以下是常见用法:
减去天数
sql
SELECT DATE_SUB('2023-10-05', INTERVAL 3 DAY); -- 结果:2023-10-02(从指定日期减去3天)
减去月份
sql
SELECT DATE_SUB('2023-10-05', INTERVAL 1 MONTH); -- 结果:2023-09-05(从指定日期减去1个月)
减去小时
sql
SELECT DATE_SUB('2023-10-05 12:00:00', INTERVAL 2 HOUR); -- 结果:2023-10-05 10:00:00(从指定时间减去2小时)
结合当前时间使用
CURDATE()
(当前日期)或NOW()
(当前日期时间)作为基础:sql
SELECT DATE_SUB(CURDATE(), INTERVAL 7 DAY); -- 7天前的日期 SELECT DATE_SUB(NOW(), INTERVAL 1 YEAR); -- 1年前的此刻
负数运算(相当于加法)
sql
SELECT DATE_SUB('2023-10-05', INTERVAL -5 DAY); -- 结果:2023-10-10(相当于加5天)
实际应用场景
- 筛选近 30 天的数据:
sql
SELECT * FROM orders WHERE create_time >= DATE_SUB(CURDATE(), INTERVAL 30 DAY);
- 计算过期时间(如 7 天后过期):
sql
SELECT DATE_SUB(NOW(), INTERVAL -7 DAY) AS expire_time;
注意事项
- 若减去月份时,原日期的天数超过目标月份的最大天数,结果会自动调整(例如
DATE_SUB('2023-03-31', INTERVAL 1 MONTH)
返回2023-02-28
或2023-02-29
)。 - 与
DATE_ADD()
函数功能相反,DATE_ADD()
用于日期加法运算。
通过 DATE_SUB()
可以灵活处理日期时间的偏移计算,是数据分析和时间范围筛选的常用工具。