Выражение регистра внутри предложения 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')
Другие вопросы по тегам