Oracle to_date возвращает неверный результат - PullRequest
0 голосов
/ 13 ноября 2018

У меня в таблице 4 столбца - Код, Статус, EffectiveDate (EFF_DT), EndDate (END_DT). Все столбцы типа Varchar2. EFF_DT и END_DT имеют дату в формате ISO (ГГГГ-ММ-ДД) со значениями NULL для нескольких строк. Необходимо получить строки, у которых END_DT больше, чем сегодняшняя дата. Выполняя приведенный ниже запрос, он возвращает все строки Not NULL для END_DT. Не сравнивайте 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. Для 1-го запроса данные приходят как -

enter image description here

в то время как для второго запроса данные поступают как

enter image description here

...