You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL查询当日订单返回无数据问题排查与解决

Oracle SQL查询指定日期数据无结果的问题解决

问题场景

需要查询LAB_RESULTS表中2023年8月23日的所有数据,尝试了以下两种查询语句,均返回no rows returned,但确认当日存在大量订单数据。

错误写法1:BETWEEN匹配同一日期

SELECT * 
FROM LAB_RESULTS
WHERE LAB_RESULTS.SERV_REQUEST_DATE BETWEEN TO_DATE('23/08/2023', 'DD/MM/YYYY') 
AND TO_DATE('23/08/2023', 'DD/MM/YYYY')

错误写法2:>=和<同一日期

SELECT * 
FROM LAB_RESULTS
WHERE LAB_RESULTS.SERV_REQUEST_DATE >=  TO_DATE('23/08/2023', 'DD/MM/YYYY')
AND LAB_RESULTS.SERV_REQUEST_DATE <   TO_DATE('23/08/2023', 'DD/MM/YYYY')

原因分析

问题核心在于SERV_REQUEST_DATE是包含时分秒的日期时间类型:

  • 使用TO_DATE('23/08/2023', 'DD/MM/YYYY')时,Oracle会自动将时间部分默认设为00:00:00,第一种写法的BETWEEN等价于筛选严格等于2023-08-23 00:00:00的数据,若当日订单时间都不在整点则查不到结果;
  • 第二种写法的条件>= 00:00:00且< 00:00:00逻辑矛盾,必然无匹配结果。

解决方案

方案1:指定完整时间范围

通过在TO_DATE中添加时分秒格式,明确限定当天00:00:00到23:59:55的时间范围,即可匹配当日所有数据:

SELECT * 
FROM LAB_RESULTS
WHERE LAB_RESULTS.SERV_REQUEST_DATE 
BETWEEN TO_DATE('23/08/2023 00:00:00', 'DD/MM/YYYY HH24:MI:SS')   
AND TO_DATE('23/08/2023 23:59:55', 'DD/MM/YYYY HH24:MI:SS')

方案2:匹配到次日0点(更稳妥)

为避免因时间精度(如毫秒级数据)导致的边界漏查,可采用“大于等于目标日期,小于次日日期”的写法,无需指定时分秒:

SELECT * 
FROM LAB_RESULTS
WHERE LAB_RESULTS.SERV_REQUEST_DATE >= TO_DATE('23/08/2023', 'DD/MM/YYYY')
AND LAB_RESULTS.SERV_REQUEST_DATE < TO_DATE('24/08/2023', 'DD/MM/YYYY')

内容的提问来源于stack exchange,提问作者Ziad Adnan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 22:36:26