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

