Oracle中null的處理

在工作學習當中,會經常遇到字段值爲null的情況,很是大煞風景,那該怎樣處理呢?


1、使用nvl(expr1,expr2) 處理NULL值

解釋該函數:nvl函數可以將expr1爲空時,則返回expr2;不爲空時,則返回expr1。

需要注意的是:參數expr1和expr2可以是任意數據類型,但二者的數據類型必須要匹配。

SELECT ename,sal,comm,sal+nvl(comm,0) AS '月收入' FROM emp;

2、使用nvl2(expr1)處理NULL值


解釋該函數:nvl2是Oracle9i新增加的函數,該函數也用於NULL。格式爲NVL2(expr1,expr2,expr3)。如果expr不是null,則返回expr2;如果expr1爲null,則返回expr3。

其中,expr1可以是任意數據類型,而expr2和expr3可以是除LONG之外的任何數據類型。同樣需要注意的是,expr2和expr3的數據類型必須要和expr1的數據類型匹配。

SELECT ename,nvl2(comm,sal+comm,sal) FROM emp;

3、使用decode函數處理NULL
decode的語法結構如下:

decode (expression, search_1, result_1)
decode (expression, search_1, result_1, search_2, result_2)
decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n)

decode (expression, search_1, result_1, default)
decode (expression, search_1, result_1, search_2, result_2, default)
decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n, default)
其中呢,我們可以利用decode(字段或字段的運算,值1,值2,值3)該結構進行對null進行處理;當字段或字段的運算的值等於值1時,該函數返回值2,否則返回值3
當然值1,值2,值3也可以是表達式。

e.g:

SELECT ename,decode(comm,null,sal,comm+sal) FROM emp; 

3、使用case語法

e.g:

select * from ywgl_user  
order by (case username  
    when null then  
     '李四'  
     else  
     username  
end);
表示當ywglname爲空時返回‘李四’,如果不爲空則返回username。


本文轉自於:http://blog.csdn.net/joyksk/article/details/54316125



發佈了32 篇原創文章 · 獲贊 32 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章