Oracle的 nvl 函數及 nvl2 函數的應用

一、基本語法:

  • nvl 函數:

nvl 函數的基本語法爲 nvl(E1, E2),如果E1爲 NULL,則函數返回E2,否則返回E1本身。但此函數有一定侷限,所以就有了nvl2函數。如果兩個參數的值都爲空值,則返回空值。

注意:第一個參數和第二個參數可以是任何類型的數據,但兩個參數的數據類型必須相同(或能夠由Oracle隱式轉換爲相同的類型)

  • nvl2 函數:

nvl2 函數的基本語法爲 nvl2(E1, E2, E3),它是在nvl函數的功能上擴展的,如果E1爲 NULL,則函數返回E3,若E1不爲 NULL,則返回E2。

二、返回值類型

返回值類型可以爲字符型、日期型、日期時間型、數值型、貨幣型、邏輯型或nul值。

三、說明

在不支持 null 值或 null 值無關緊要的情況下,可以使用 nvl() 函數來移去計算或操作中的 null 值。

select nvl(a.name,'爲空想要返回的值') as name from test01 a join test02 b on a.id = b.id;

注意:兩個參數得類型要匹配,必須爲同一數據類型,除非顯式的使用 TO_CHAR 函數。

四、應用場景

nvl() 函數比較常用的是這樣的nvl(E1, 0),意思是E1參數查詢到爲null的情況,就返回 0,不爲 null 就返回E1,常用於非空校驗

nvl2() 函數的應用場景也比較多,常用於根據查詢的值返回不同的結果。

例如1:查詢性別。

select nvl2(gender, '男', '女') as sex from student; 

例:2:用列轉行函數 vm_concat 查詢一個用戶和他的賬號顯示爲 用戶名a(賬號b)  效果。

假如b參數爲空的情況就會出現“a()”的參數,而我想要的是b參數爲空的情況,直接返回“a”參數,b參數不爲空的情況才返回“a(b)”類型的數據,通過nvl2函數就可以很好的實現:

select to_char(wm_concat(nvl2(b, a || '(' || b || ')', a))) as 返回參數 from test01 where id = 1;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章