1.问题
Oracle查询当天日期查询不到数据
SELECT * FROM 表名 a WHERE a.CREATE_TIME BETWEEN TO_DATE('2022-12-28','YYYY-MM-DD') AND TO_DATE('2022-12-29','YYYY-MM-DD');
2.原因
-- CREATE_TIME 在数据库中为 TIMESTAMP类型 (2022-12-29 11:23:35.000)
Oracle 对字符串进行了隐式转换,将 年月日(2022-12-29) 格式转换为 年月日 时分秒(2022-12-29 00:00:00)
3.解决
方案1
SELECT * FROM 表名 a WHERE TO_CHAR(a.CREATE_TIME,'YYYY-MM-DD') BETWEEN '2022-12-28' AND '2022-12-29';
TO_CHAR查询速度比TO_DATE的速度慢,因为每检索一次,都要对左边的字段进行TO_CHAR转换,而如果函数在右边,只要转换一次。最终方案:
方案2
SELECT * FROM 表名 a WHERE a.CREATE_TIME BETWEEN TO_DATE('2022-12-28','YYYY-MM-DD') AND TO_DATE('2022-12-29','YYYY-MM-DD')+1;
查询范围为 2022-12-28 00:00:00 ---- 2022-12-30 00:00:00