如何修改SQL查询实现2000-01-01至2000-01-02的时间范围筛选
修正后的SQL查询写法
1. 兼容原有逻辑的直接修改版
如果你需要保留原有日期格式化的写法,直接追加AND条件即可:
SELECT * FROM abc WHERE filehash IN ( SELECT xyz FROM 123 WHERE FROM_UNIXTIME(timecreated,'%m-%d-%Y') >= "01-01-2000" AND FROM_UNIXTIME(timecreated,'%m-%d-%Y') <= "01-02-2000" )
注意:该写法对timecreated字段使用了函数转换,无法命中该字段的索引,数据量较大时查询性能会较差,更推荐使用下方的高性能写法
2. 高性能推荐写法
直接对时间戳字段做数值范围匹配,不需要格式转换,可命中索引:
SELECT * FROM abc WHERE filehash IN ( SELECT xyz FROM 123 WHERE timecreated >= UNIX_TIMESTAMP("2000-01-01 00:00:00") AND timecreated <= UNIX_TIMESTAMP("2000-01-02 23:59:59") )
该写法避免了日期格式转换可能带来的字符串比较逻辑错误,查询效率更高。
内容的提问来源于stack exchange,提问作者theomh
相关产品推荐
相关产品推荐

