使用Case When SQL时,列为空

时间:2017-07-18 15:03:25

标签: sql case substitution case-when

我正在使用SQL Developer

我需要接受用户输入为Y或N.

如果输入N,我需要将其转换为null。如果输入Y,则它应保持为Y.然后,脚本需要搜索具有空值或Y值的列,具体取决于用户输入的内容。

我有以下代码,如何解决它

接受WITHDRAWN字符提示'请输入Y或N)'

SELECT *
FROM table1
WHERE column1 = case when '&WITHDRAWN' = 'N' then null else '&WITHDRAWN' end;  

正如您可能知道的那样,它不起作用,因为列为空,' ='标志需要是一个'。同样,该列将是' Y'然后标志必须是' ='。

我真的无法找到一种方法来替换N的值为null,并允许column1与此匹配。它甚至可能吗?

4 个答案:

答案 0 :(得分:1)

我会合并column1值,所以当它为Null时,N被替换并与用户输入进行比较。

SELECT *
FROM table1
WHERE coalsece(column1,'N') = &WITHDRAWN;  

假设在table1中,所有为null的column1都是'N',因此coalesce只允许我们进行字符到字符的比较。

另请注意,column1上的索引将被忽略,因为我们必须使用函数来返回'N'值。

答案 1 :(得分:0)

   SELECT * FROM table1 
   WHERE (
       (column1 = '&&WITHDRAWN' AND '&&WITHDRAWN' = 'Y') 
    OR 
       (column1 IS NULL         AND '&&WITHDRAWN' = 'N'))

答案 2 :(得分:0)

你根本不需要案件:

SELECT *
FROM Table1
WHERE 
(
    '&WITHDRAWN' = 'N'
    AND Column1 IS NULL 
)
OR Column1 = 'Y'

答案 3 :(得分:0)

select * from table1 
where (
    (column1 = '&WITHDRAWN' and '&WITHDRAWN' != 'N') 
  or 
    (column1 is null        and '&WITHDRAWN' = 'N'))

希望这有帮助!