MySQL中WHERE子句使用ADD_DATE()查询近4小时记录无返回问题
错误点分析
- 你的WHERE条件中
creation_time >= DATE_ADD(creation_time, INTERVAL 4 HOUR)的逻辑不成立:对任意一行记录来说,creation_time本身是固定的时间值,给它加4小时得到的时间一定比它本身晚,不存在任何时间能满足「自身时间 >= 自身时间+4小时」的判断,所以所有行都无法匹配条件,自然返回空结果。 - 时间范围判断逻辑不符合需求:你要查询「近4小时创建的记录」,是需要将
creation_time和当前时间往前推4小时的时间节点做对比,而非和自身做运算对比。
解决方案
将WHERE条件中的时间对比逻辑替换为当前时间减4小时即可,正确SQL如下:
SELECT id,name,status,creation_time, DATE_ADD(creation_time, INTERVAL 4 HOUR) AS modified_time FROM booking WHERE status=1 AND creation_time >= DATE_SUB(NOW(), INTERVAL 4 HOUR)
如果要使用DATE_ADD实现同样的效果,也可以写成:
SELECT id,name,status,creation_time, DATE_ADD(creation_time, INTERVAL 4 HOUR) AS modified_time FROM booking WHERE status=1 AND creation_time >= DATE_ADD(NOW(), INTERVAL -4 HOUR)
注:如果你的数据库不支持NOW(),可以替换为CURRENT_TIMESTAMP,两者语义一致。
内容的提问来源于stack exchange,提问作者Lalit Dubey
相关产品推荐
相关产品推荐

