Выражение регистра внутри предложения where - Oracle
У меня есть столбец дат, который имеет 2 разных формата данных: гггг-мм-дд и дд / мм / гггг. Из-за этого я должен определить формат даты, чтобы я мог преобразовать их в правильный формат. Мой запрос SQL выглядит следующим образом:
select *
from teste
where
(CASE
WHEN data like '%-%' THEN
TO_DATE(data, 'yyyy-mm-dd') BETWEEN
TO_DATE(01/01/2000, 'dd/mm/yyyy') AND
TO_DATE(01/01/2016, 'dd/mm/yyyy')
ELSE
TO_DATE(data, 'dd/mm/yyyy') BETWEEN
TO_DATE(01/01/2000, 'dd/mm/yyyy') AND
TO_DATE(01/01/2016, 'dd/mm/yyyy')
END)
Запустив это, я получаю ошибку:
00905. 00000 - "отсутствует ключевое слово"
* Причина:
* Действие:
Erro na linha: 6 Колуна: 35.
Кажется, что есть проблема в предложении между. Может ли кто-нибудь помочь мне с этим?
1 ответ
Решение
CASE
выражение возвращает вам какое-то значение. И вы должны сравнить это значение с чем-то. Вы не можете поместить все выражение в CASE.
Например
select *
from teste
where
CASE WHEN data like '%-%' THEN
TO_DATE(data, 'yyyy-mm-dd')
ELSE
TO_DATE(data, 'dd/mm/yyyy')
END
BETWEEN TO_DATE(01/01/2000, 'dd/mm/yyyy') AND
TO_DATE(01/01/2016, 'dd/mm/yyyy')