2017-07-18 61 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')) 

希望得到這個幫助!