1. 程式人生 > >Oracle的nvl函式和nvl2函式

Oracle的nvl函式和nvl2函式

一、基本語法

介紹一下oracle的nvl函式和nvl2函式。

nvl函式
nvl函式基本語法為nvl(E1,E2),意思是E1為null就返回E2,不為null就返回E1。

nvl2函式
nvl2函式的是nvl函式的拓展,基本語法為nvl2(E1,E2,E3),意思是E1為null,就返回E3,不為null就返回E2。

二、業務場景

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

nvl2()函式也講一個業務場景。今天用列轉行函式vm_concat查詢的時候,遇到一個問題,對vm_concat不熟悉的可以參考我的另外一篇部落格:

https://blog.csdn.net/u014427391/article/details/84981114

我用vm_concat查詢,假如b引數為空的情況就會出現“a()”的引數,我想做的是b引數為空的情況,直接返回“a”引數,b引數不為空的情況才返回“a(b)”型別的資料,比如可以是使用者名稱a(賬號b)這樣顯示。原來SQL是這樣的。

select to_char(nvl2(b,vm_concat(a||'('||b||')'), '') from A group by id

改寫SQL,通過nvl2函式實現改寫:

select to_char(wm_concat(nvl2(b,
                             a || '(' || b || ')',
                              a))) as 返回引數