You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从MySQL的PACKAGES表筛选SERVICE_EXPIRY_DATE未来15天内到期的记录?

查询MySQL中服务到期日15天内的记录

嗨,这个需求很常见,我给你几种实用的实现方式,还会顺带提下性能优化的关键点:

  • 方法一:使用DATE_ADD与当前时间范围匹配(推荐,性能更优)
    这种方式直接对当前时间做计算,不会修改查询的列,所以如果SERVICE_EXPIRY_DATE上有索引的话,MySQL可以直接利用索引加速查询:

    SELECT *
    FROM PACKAGES
    WHERE SERVICE_EXPIRY_DATE BETWEEN CURRENT_TIMESTAMP AND DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 15 DAY);
    

    解释一下:CURRENT_TIMESTAMP会返回当前的日期时间,DATE_ADD把当前时间往后推15天,BETWEEN就精准匹配了从现在到15天后的到期记录,刚好符合你要的“距离查询时刻15天以内”的需求。

  • 方法二:使用DATEDIFF计算天数差
    如果你更习惯用天数差来判断,也可以用DATEDIFF函数,不过要注意参数顺序(MySQL中DATEDIFF(a,b)返回a - b的天数差):

    SELECT *
    FROM PACKAGES
    WHERE DATEDIFF(SERVICE_EXPIRY_DATE, CURRENT_TIMESTAMP) BETWEEN 0 AND 15;
    

    这里0代表刚好今天到期,15代表15天后到期,区间内的记录都会被选中。不过要注意:这种写法因为用函数包裹了SERVICE_EXPIRY_DATE列,MySQL无法利用该列的索引,数据量大的时候查询会变慢,所以优先选方法一。

额外注意事项

  1. 边界调整:如果你的需求是“不到15天”(即排除刚好第15天的记录),可以把INTERVAL 15 DAY改成INTERVAL 14 DAY,或者把DATEDIFF的上限设为14。
  2. 索引优化:如果你的PACKAGES表数据量较大,一定要给SERVICE_EXPIRY_DATE建索引,能大幅提升查询速度:
    CREATE INDEX idx_service_expiry_date ON PACKAGES(SERVICE_EXPIRY_DATE);
    
  3. 日期类型兼容:不管SERVICE_EXPIRY_DATE是DATETIME还是DATE类型,上面的语句都能正常工作,MySQL会自动做类型转换匹配。

内容的提问来源于stack exchange,提问作者User 101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:18:29