首页 > 解决方案 > Oracle to_date 返回不正确的结果

问题描述

我有一个 4 列的表 - 代码、状态、有效日期 (EFF_DT)、结束日期 (END_DT)。所有列都是 Varchar2 类型。EFF_DT 和 END_DT 具有 ISO 格式日期 (YYYY-MM-DD),其中几行的值为 NULL。需要获取 END_DT 大于今天日期的行。执行以下查询时,它返回 END_DT 的所有 Not NULL 行。根本不比较 END_DT。

select code, status, EFF_DT, END_DT 
from (
  select CODE, EFF_DT, Status,to_date("END_DT" ,'YYYY-MM-DD' ) as END_DT 
  from xxx.ZZZ 
) TAB 
where to_date(TAB.END_DT ,'DD-MM-YY' ) >  to_date(CAST(CURRENT_TIMESTAMP as Date), 'DD-MM-YY') 
ORDER BY 1 ASC

但下面的查询比较 END_DT 并正确返回结果 -

SELECT "TAB"."CODE"  ,  "TAB"."STATUS" AS "STATUS" , "TAB"."EFF_DT"  , "TAB"."END_DT"  
FROM xxx.ZZZ  "TAB"  
WHERE (  (to_date("TAB"."END_DT",'YYYY-MM-DD') >  to_date(CAST(CURRENT_TIMESTAMP as Date), 'YY-MM-DD'))    ) 
ORDER BY 1 ASC

第一个查询出了什么问题?我看到 END_DT 的返回值有所不同。对于第一个查询,数据就像 -

在此处输入图像描述

而对于第二个查询,数据就像

在此处输入图像描述

标签: oracle11gto-date

解决方案


推荐阅读