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

MySQL不同格式到期时间查询适配及cron去重查询问题

问题解答

你提供的SQL语句不能直接适配unix epoch int类型的expiry_date字段,也不需要提前在PHP中将时间戳转换为datetime格式,直接在SQL层做类型适配即可。

原SQL不兼容unix epoch字段的原因

原SQL中DATE_ADD(CURDATE(), INTERVAL N DAY)返回的是日期/datetime类型的值,和存储为int类型的unix时间戳格式不匹配,直接执行会出现类型比对错误,无法查询到正确结果。

两种字段格式的正确查询写法

1. 适配datetime类型expiry_date的表

保留原有逻辑,调整边界符号为左闭右开,刚好覆盖[1天,2天)的到期区间,也能避免cron每日运行时重复命中同一条记录:

SELECT * 
FROM 表名
WHERE expiry_date >= DATE_ADD(CURDATE(), INTERVAL 1 DAY) 
AND expiry_date < DATE_ADD(CURDATE(), INTERVAL 2 DAY)

2. 适配unix epoch int类型expiry_date的表

直接用SQL原生UNIX_TIMESTAMP()函数把时间边界转换为unix时间戳即可,无需在PHP层做转换:

SELECT * 
FROM 表名
WHERE expiry_date >= UNIX_TIMESTAMP(DATE_ADD(CURDATE(), INTERVAL 1 DAY))
AND expiry_date < UNIX_TIMESTAMP(DATE_ADD(CURDATE(), INTERVAL 2 DAY))

不推荐在PHP层转换的原因

  • SQL原生时间转换函数执行效率更高,不会额外增加业务代码复杂度
  • 避免PHP时区和数据库时区不一致导致的时间计算偏差,结果更准确

内容的提问来源于stack exchange,提问作者dds sddssd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:39:02