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

Oracle数据库SQL BETWEEN日期范围查询返回空集求修改方案

问题原因及修改方案

1 核心语法错误:BETWEEN边界顺序颠倒

BETWEEN的语法规则为表达式 BETWEEN 较小值 AND 较大值,如果左边界大于右边界,整个过滤条件永远为假,不会返回任何结果。你当前语句中将2020年的时间放在左边界、2017年的时间放在右边界,顺序完全不符合要求,这是返回空集的直接原因。

2 隐式类型转换风险

不要直接将字符串与Oracle的DATE类型字段做比较,不同实例的NLS_DATE_FORMAT参数配置不同,隐式转换很容易出现转换失败、或转换结果不符合预期的问题,建议使用TO_DATE函数显式做类型转换。另外DATE是Oracle的保留关键字,作为字段名使用时需要用双引号包裹,避免语法报错。

修正后的SQL

SELECT id, "DATE"
FROM Table_name 
WHERE "DATE" BETWEEN TO_DATE('2017-10-21 22:00:17', 'YYYY-MM-DD HH24:MI:SS') 
                 AND TO_DATE('2020-10-21 10:00:17', 'YYYY-MM-DD HH24:MI:SS') 
  AND id = '123';

补充说明

修正后的语句会自动包含两个边界的时间值,完全符合你的需求。如果你需要把2017-08-12这类早于2017-10-21的记录也纳入结果,只需将TO_DATE('2017-10-21 22:00:17', 'YYYY-MM-DD HH24:MI:SS')的时间值调整为你需要的更早的起始时间即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:48:03