where 子句内的 Case 表达式 - Oracle

Case expression inside a where clause - Oracle

我有一列日期有两种不同的数据格式:yyyy-mm-dd 和 dd/mm/yyyy。 因此,我必须识别日期的格式,以便我可以将它们转换为正确的格式。我的 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 - "missing keyword" *原因:
*行动: Erro na linha: 6 Coluna: 35.

between子句好像有问题。谁能帮我解决这个问题?

CASE表示returns你有些值。你应该将这个值与某些东西进行比较。您不能将整个表达式放在 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')