2017-07-18 45 views
0

我使用SQL Developer的列为空使用情况当SQL

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

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

我有以下为如何解决这一个体面的想法代码

接受撤回字符提示“请输入Y或N)”

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

正如你可能会说,这不是” t的工作,至于列为空,'='符号将需要是'是'。同样,如果列是'Y',那么符号将需要'='。

我真的不知道如何用N代替null的值,并允许column1与此匹配。它甚至有可能吗?

+0

替代column1而不是用户输入。 '当column1为空然后'N'else'Y'end =&withdrawn'或者简单地使用coalesce时的情况。 'coalesce(column1,'N')=&撤回' – xQbert

回答

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

你并不需要的情况下,在所有:

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

我聚结COLUMN1值,所以当它为空,N被取代,并且与用户的输入。

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

假设在表1是所有COLUMN1的是空是逸岸“N”所以聚结只是让我们做一个字符的字符比较。

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

+0

这很好。谢谢!! – TomB

+0

任何时候您使用这样的功能时,如果存在可能无法使用的索引,将被警告该索引。 – xQbert

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

希望得到这个帮助!