Oracle的nvl函式和nvl2函式
阿新 • • 發佈:2018-12-13
一、基本語法
介紹一下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 返回引數