SQL查询近1分钟数据返回全部内容问题排查求助
解决SQL查询返回全部数据的问题
你写的SELECT * FROM menfesses WHERE created_at >= NOW() - INTERVAL 1 MINUTE;返回了所有数据,问题大概率出在这几个地方:
created_at字段类型不对:如果这个字段存的是字符串(VARCHAR类型),不是DATETIME或TIMESTAMP,数据库没法正确做时间数值对比,会按字符串的字符顺序来比,导致这个条件对所有数据都成立。你可以跑DESCRIBE menfesses;看看这个字段的类型。- 时区不匹配:
NOW()取的是数据库服务器的当前时间,如果created_at存的是你本地时区的时间,且服务器时区比你本地晚很多,那NOW() - 1分钟会比所有created_at都早,自然会返回全部数据。可以先跑SELECT NOW(), created_at FROM menfesses LIMIT 1;对比一下两者的时间差。 created_at数据格式无效:就算字段是时间类型,如果里面存的是不符合格式的无效时间,也会让比较逻辑失效,导致条件一直成立。
如果是字段类型为字符串的问题,你可以先尝试把字段转成时间类型再做比较,比如:
SELECT * FROM menfesses WHERE STR_TO_DATE(created_at, '%Y-%m-%d %H:%i:%s') >= NOW() - INTERVAL 1 MINUTE;
注意要把%Y-%m-%d %H:%i:%s换成你实际存储的时间格式。
你试的DATE_ADD方法,如果是写成DATE_ADD(NOW(), INTERVAL -1 MINUTE),逻辑和NOW() - INTERVAL 1 MINUTE完全一样,所以也会因为上面的原因失效。
内容的提问来源于stack exchange,提问作者Farhandika
相关产品推荐
相关产品推荐

