mysql DATE_SUB函数 对日期或时间进行减法运算

MySQL 的 DATE_SUB() 函数用于对日期或时间进行减法运算,返回一个经过计算的新日期 / 时间值。它通常用于从指定日期中减去一定的时间间隔(如天数、小时、月份等)。

语法

sql

DATE_SUB(date, INTERVAL expr unit)
  • date:要进行运算的基础日期 / 时间,可以是日期字符串、DATE 类型或 DATETIME 类型的值。
  • expr:要减去的数值(可以是正数或负数,若为负数则相当于加法)。
  • unit:时间单位,如 DAYMONTHHOUR 等。

常用时间单位

支持的 unit 参数包括:MICROSECOND(微秒)、SECOND(秒)、MINUTE(分钟)、HOUR(小时)、DAY(天)、WEEK(周)、MONTH(月)、QUARTER(季度)、YEAR(年)等。

示例

假设当前日期为 2023-10-05,以下是常见用法:

  1. 减去天数

    sql

    SELECT DATE_SUB('2023-10-05', INTERVAL 3 DAY);
    -- 结果:2023-10-02(从指定日期减去3天)
    
  2. 减去月份

    sql

    SELECT DATE_SUB('2023-10-05', INTERVAL 1 MONTH);
    -- 结果:2023-09-05(从指定日期减去1个月)
    
  3. 减去小时

    sql

    SELECT DATE_SUB('2023-10-05 12:00:00', INTERVAL 2 HOUR);
    -- 结果:2023-10-05 10:00:00(从指定时间减去2小时)
    
  4. 结合当前时间使用 CURDATE()(当前日期)或 NOW()(当前日期时间)作为基础:

    sql

    SELECT DATE_SUB(CURDATE(), INTERVAL 7 DAY); -- 7天前的日期
    SELECT DATE_SUB(NOW(), INTERVAL 1 YEAR);   -- 1年前的此刻
    
  5. 负数运算(相当于加法)

    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() 可以灵活处理日期时间的偏移计算,是数据分析和时间范围筛选的常用工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值