SQL查询:如何仅筛选距离预约时间提前24小时的记录
问题原因
你现有SQL的问题是仅设置了预约时间的下限,未设置上限。datetime > NOW() - INTERVAL 1 DAY 会匹配所有预约时间晚于24小时前的记录,所有尚未到期的预约自然都满足该条件,因此会返回远晚于24小时后才开始的预约数据。
修正方案
你需要同时为datetime字段设置上下限,筛选出「距离预约开始时间刚好差24小时左右的记录,具体区间可以根据你定时脚本的运行频率调整:
- 若脚本每小时运行一次,可使用如下查询:
SELECT * FROM appointments WHERE reminder_email_sent = 0 AND deleted = 0 AND datetime BETWEEN NOW() + INTERVAL 23 HOUR AND NOW() + INTERVAL 24 HOUR;
- 若脚本每15分钟运行一次,可缩小时间区间避免重复匹配:
SELECT * FROM appointments WHERE reminder_email_sent = 0 AND deleted = 0 AND datetime >= NOW() + INTERVAL 23 HOUR 45 MINUTE AND datetime < NOW() + INTERVAL 24 HOUR;
注意事项
如果你的数据库时区和业务系统时区存在差异,需要先对齐时间基准,避免因时区偏差导致的提醒发送时间错误。
内容的提问来源于stack exchange,提问作者Appel Flap
相关产品推荐
相关产品推荐

