带有NULL值的Oracle SQL Case语句

时间:2012-07-23 16:58:05

标签: sql oracle parameters

我正在尝试创建一个Oracle查询,该查询将使用基于按钮的CommandName的参数。

所以这是我的查询

SELECT id 
FROM table 
WHERE dateTime IS (CASE WHEN :CommandName = 'FIRST' THEN NULL ELSE NOT NULL END)

所以我传递了参数,但它不起作用 - 我只是得到Missing NULL keyword错误

我基本上不想根据输入的参数

编写两个单独的查询

甚至不确定这是否可行或者这是否正确?

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

您可能想要更多地阅读CASE声明。

我相信您需要以下代码:

SELECT
    id 
FROM 
    table 
WHERE 
    (
        (dateTime IS NULL AND :CommandName = 'FIRST')
        OR
        (dateTime IS NOT NULL AND NVL(:CommandName, '') <> 'FIRST')
    )

答案 1 :(得分:1)

不使用动态SQL返回字符串'NULL'或'NOT NULL',您可以使用两个NVL()函数:

select id
from table
where NVL(dateTime,'FIRST') = NVL(:param,dateTime);

但是,如果将dateTime编入索引(并且Oracle可以索引NULL),则NVL()函数将禁用索引。

答案 2 :(得分:0)

我认为

SELECT id 
FROM table 
WHERE (dateTime IS NULL AND :CommandName='FIRST') OR (dateTime IS NOT NULL AND :CommandName <> 'FIRST')

应该做你需要的。