在使用带有 where 子句的 case 时

问题描述 投票:0回答:1

在使用带有 where 子句的 case 时出现错误 ORA-00905:

between

上缺少关键字
SELECT 1 FROM TABLE T, TABLEAAA O
 WHERE T.ID = O.ID
   AND (CASE WHEN :P_PIM_DATE1 IS NOT NULL AND :P_PIM_DATE2 IS NOT NULL) THEN T.F_DATE BETWEEN :P_PIM_DATE1 AND :P_PIM_DATE2 END)
oracle oracle11g
1个回答
0
投票

您发布的查询没有多大意义。您试图说出当参数(前面带有冒号;这些某种参数,不是吗?)不为空时该怎么做。但是,您没有说当它们为空时该怎么办。

也许您更愿意包含

NVL
函数,这样就可以满足这两个条件;像这样的:

select 1
from tablea t join tableaaa o on o.id = t.id
where t.f_date between nvl(:P_PIM_DATE , trunc(sysdate))
                   and nvl(:P_PIM_DATE2, trunc(sysdate + 1));

返回

f_date
位于参数值之间或“今天”和“明天”之间的行。这只是一个例子,我不知道你到底想做什么。

(另外,也许您注意到,我切换到显式

join
。将
where
子句保留为过滤数据的条件)。

© www.soinside.com 2019 - 2024. All rights reserved.