where子句中的case表达式 - Oracle

时间:2015-12-07 13:39:14

标签: oracle date case between

我有一列日期,有两种不同格式的数据: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 - “缺少关键字” *原因:
*行动: Erro na linha:6 Coluna:35。

似乎在between子句中存在问题。有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:0)

CASE表达式返回一些值。你应该把这个值与某些东西进行比较。你不能将整个表达式放在CASE中。

E.g。

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')