如何查询IPS_LIST表中EXPIRE_DATE剩余1小时内到期的记录
可用SQL解决方案
核心筛选逻辑要同时满足两个约束,就能避免远期到期记录被误查:
- 到期时间晚于当前时间,排除已经过期的记录
- 到期时间与当前时间的间隔小于1小时
以下是不同数据库的实现语句:
MySQL 版本
SELECT * FROM IPS_LIST WHERE EXPIRE_DATE > NOW() AND TIMESTAMPDIFF(SECOND, NOW(), EXPIRE_DATE) < 3600 ORDER BY EXPIRE_DATE DESC;
TIMESTAMPDIFF 计算当前时间到到期时间的秒数差,小于3600即剩余时间不足1小时,2099年这类远期到期记录的秒数差远大于3600,不会被命中。
Oracle 版本
SELECT * FROM IPS_LIST WHERE EXPIRE_DATE > SYSDATE AND (EXPIRE_DATE - SYSDATE) * 86400 < 3600 ORDER BY EXPIRE_DATE DESC;
Oracle中日期相减得到的是天数差,乘以86400(单日总秒数)转换为秒数差,判断小于3600即可。
SQL Server 版本
SELECT * FROM IPS_LIST WHERE EXPIRE_DATE > GETDATE() AND DATEDIFF(SECOND, GETDATE(), EXPIRE_DATE) < 3600 ORDER BY EXPIRE_DATE DESC;
用DATEDIFF计算当前时间到到期时间的秒数差,配合到期时间晚于当前时间的约束,即可精准筛选目标记录。
内容的提问来源于stack exchange,提问作者kkami-sama
相关产品推荐
相关产品推荐

