You need to enable JavaScript to run this app. Oracle使用BETWEEN做日期查询未返回末尾日期数据如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Oracle使用BETWEEN做日期查询未返回末尾日期数据如何解决

问题根因
  • 你使用TO_DATE('16/06/2021', 'dd/mm/yyyy')生成的日期值默认带的时间是2021-06-16 00:00:00,而BETWEEN是左右闭区间逻辑,所以16日00:00:00之后的所有数据都不在你设定的日期筛选范围内,自然统计不到16日12点到24点的电压数据。
  • 补充小问题:部分Oracle版本对时间字符串'24:00:00'的识别存在兼容隐患,可能导致部分边缘时段数据统计异常。
修复后的查询语句
SELECT TO_CHAR(datadate, 'dd/mm/yyyy'), 
       ROUND(AVG(BATTERYVOLTAGE),2) AVGVOLTAGE  
FROM   MYTABLE 
WHERE  BATTERYVOLTAGE != 0  
AND    EXTRACT(HOUR FROM datadate) >= 12
AND    DATADATE >= TO_DATE('11/06/2021', 'dd/mm/yyyy') 
AND    DATADATE < TO_DATE('17/06/2021', 'dd/mm/yyyy') 
GROUP BY TO_CHAR(datadate, 'dd/mm/yyyy') 
ORDER BY 1
说明
  • 把日期筛选逻辑从BETWEEN改为「大于等于起始日期、小于结束日期+1天的零点」,可以完整覆盖16日全天的所有数据,再结合小时>=12的筛选,就能正常统计到16日12点到24点的均值。
  • 用EXTRACT(HOUR FROM datadate) >=12替代字符串比对,兼容性更好,同时避免对日期字段做函数转换后无法走索引的性能问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 16:45:00