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

Oracle SQL提取2019-09-30之后日期时WHERE条件失效的问题

问题分析与解决

你的WHERE子句不生效,核心问题是把日期计算结果转成字符串后做比较——字符串是按字符顺序逐位对比的,完全不遵循日期逻辑。比如'01-10-2019'(实际是2019年10月1日)作为字符串,第一位'0'小于'30-09-2019'的第一位'3',会被错误判定为不符合条件。

另外原代码里WHERE子句用了o.order_date和f.warranty_period,但FROM的表oe.order_items没有定义这两个别名,这也是语法错误隐患。

正确写法

直接用日期类型做比较,不要转换为字符串:

select
    TRUNC(order_date),
    warranty_period,
    to_char(order_date + warranty_period,'DD-MM-YYYY') as warranty_end_date
from oe.order_items 
where order_date + warranty_period >= TO_DATE('30-09-2019', 'DD-MM-YYYY');

如果需要给表加别名(推荐,避免字段歧义):

select
    TRUNC(oi.order_date),
    oi.warranty_period,
    to_char(oi.order_date + oi.warranty_period,'DD-MM-YYYY') as warranty_end_date
from oe.order_items oi
where oi.order_date + oi.warranty_period >= TO_DATE('30-09-2019', 'DD-MM-YYYY');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:45:00