我正在使用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与此匹配。它甚至可能吗?
答案 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'))
希望这有帮助!