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
相关产品推荐
相关产品推荐

