在DATETIME/TIMESTAMP列中查询单日数据无结果的技术问题
问题原因与解决方案
问题出在你的created_date字段类型上——它应该是datetime/timestamp类型(包含时分秒),而你写的条件created_date <= '2022-10-28'会被数据库解析为created_date <= '2022-10-28 00:00:00',当天任何带有非0时间的记录(比如2022-10-28 08:30:00)都不满足这个条件,所以查不到结果。
推荐解决方案
方案1(最优,不影响索引):
把结束条件改成次日的0点,用开区间过滤:SELECT * from exampletable where created_date >= '2022-10-28' AND created_date < '2022-10-29'这个方法能精准覆盖当天所有时间的记录,同时不会破坏
created_date字段的索引使用,查询效率最高。方案2(简单但可能影响索引):
用日期提取函数匹配日期部分:-- MySQL示例 SELECT * from exampletable where DATE(created_date) = '2022-10-28' -- SQL Server示例 SELECT * from exampletable where CONVERT(date, created_date) = '2022-10-28'注意:这种写法会让数据库无法使用
created_date上的索引,如果表数据量很大,查询速度会变慢。方案3(兼容闭区间写法):
明确指定当天的最后一秒:SELECT * from exampletable where created_date >= '2022-10-28' AND created_date <= '2022-10-28 23:59:59'这个方法也能生效,但要注意部分数据库的datetime精度(比如毫秒级),可能会漏掉
2022-10-28 23:59:59.123这类记录,所以方案1更稳妥。
内容的提问来源于stack exchange,提问作者SEO fKings
相关产品推荐
相关产品推荐

