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

Oracle查询Varchar类型日期数据返回空表的问题

问题分析与解决方法

问题根源

你的查询返回空表,核心原因是错误地将日期转成字符串后做比较:
字符串比较是按字符顺序逐位对比的,31-12-2021作为字符串会比01-01-2022大(第一位3>0),你的条件相当于找一个既大于大值又小于小值的日期,自然没有符合条件的数据。

正确查询语句

直接将字符串日期转换为日期类型后,按日期逻辑进行比较,不要转成字符串:

SELECT *
FROM SD_BDAY
WHERE to_date(RECEIVED_DT_KEY, 'DD-MM-YYYY') >= to_date('31-12-2021', 'DD-MM-YYYY')
  AND to_date(RECEIVED_DT_KEY, 'DD-MM-YYYY') <= to_date('01-01-2022', 'DD-MM-YYYY');

如果想用简洁写法,也可以用BETWEEN:

SELECT *
FROM SD_BDAY
WHERE to_date(RECEIVED_DT_KEY, 'DD-MM-YYYY') BETWEEN to_date('31-12-2021', 'DD-MM-YYYY') AND to_date('01-01-2022', 'DD-MM-YYYY');

额外建议

  • 不要用字符串存储日期,建议将RECEIVED_DT_KEY列修改为DATE类型(或对应数据库的日期类型),这样查询更高效,还能避免格式转换错误。
  • 所有日期比较操作,都要基于日期类型而非字符串类型,确保逻辑正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 00:57:23