2016-10-05 60 views
-2

我有一個名稱爲HARDWARE_ISSUE的表。它有兩列div_code和分支代碼。 div_code的數據類型是NUMBER,branch_code是varchar2。當div_code的值是blank時,我想選擇branch_code。我的查詢如下:如何檢查oracle中的一個空白的數據類型爲NUMBER的列

select (case when div_code= null then to_char(branch_code) else to_char(div_code) end) as brordiv from HARDWARE_ISSUE 

但是當div_code爲空時,它無法選擇branch_code。我也運行下面的查詢:

select * from HARDWARE_ISSUE where div_code= null 

它也不會產生任何行。但有15行包含空的div_code。我正在使用oracle 11g。請幫幫我。

+1

'...其中div_code爲空' – Aleksej

+0

[文檔有關於空值的部分](http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements005.htm)。 –

+0

您是否需要過濾行或提取所有行?如果你需要一個過濾器,你需要一個WHERE,否則你可以簡化你的代碼與NVL或COALESCE – Aleksej

回答

-2

嘗試這樣

select (case when div_code= null then to_char(branch_code) else 
to_char(div_code) end) as brordiv from HARDWARE_ISSUE where div_code IS null 
+0

select(case div_code is null then to_char(branch_code)else to_char(div_code)end),因爲brordiv從HARDWARE_ISSUE是works.Thanks –

+1

你仍然有'div_code = null';此外,如果過濾「div_code爲空」的行,「CASE」應該做什麼? – Aleksej

+0

我想在div_code爲空時選擇branch_code。查詢-SELECT COALESCE(TO_CHAR(DIV_CODE),BRANCH_CODE)AS BRORDIV FROM HARDWARE_ISSUE產生實際結果。謝謝。 –

0

Coalesce

select coalesce(to_char(div_code), branch_code) as brordiv 
from hardware_issue 
+0

嗯。根據OP的聲明'DIV_CODE'爲NUMBER,而'BRANCH_CODE'爲VARCHAR2。 'COALESCE'會拋出一個'ORA-00932:不一致的數據類型'錯誤。但是,NVL應該在這裏正常工作,因爲它會將DIV_CODE轉換爲字符。 –

+0

你說得對。我誤解了OP對兩個字段應用to_char的事實,謝謝 – Aleksej

0

有幾種可能性:

SELECT COALESCE(TO_CHAR(DIV_CODE), BRANCH_CODE) AS BRORDIV 
    FROM HARDWARE_ISSUE 

將解決該ORA-00932,我在我的評論指出上在@ Aleksej的回答。此外

SELECT NVL(DIV_CODE, BRANCH_CODE) AS BRORDIV 
    FROM HARDWARE_ISSUE 

會自動施放DIV_CODE到VARCHAR2,從而隱藏的問題 - 但還有強制轉換爲VARCHAR2參與,這意味着你可能不會得到你所期望的數據類型。

並始終記得使用SOME_COLUMN IS NULL而不是SOME_COLUMN = NULL。第一個將按預期工作 - 第二個不會。

相關問題