У меня в таблице 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-го запроса данные приходят как -
в то время как для второго запроса данные поступают как