Oracle的nvl函數和nvl2函數
阿新 • • 發佈:2018-12-14
意思 str 比較 函數 oracle 函數實現 nvl2 con rom
一、基本語法
介紹一下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 返回參數
Oracle的nvl函數和nvl2函數