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')
我有一列日期有两种不同的数据格式: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')