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

Oracle的nvl函數和nvl2函數

意思 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函數