Oracle 第一個字段為空,取第二個字段,如果第二個字段為空取第三個字段...... (nvl函數詳解及嵌套或者coalesce函數的使用)


Nvl函數詳解

寫法如下:Nvl(name1,name2)nvl函數有兩個參數,如果第一個參數返回不為null,則返回第一個參數的值,如果第一個參數返回的值null,則nvl函數返回第二個參數的值,如果兩個都是null,則返回null

 select nvl('1','') from dual   === 1

select nvl('1','2') from dual   === 1

說明:以上兩種情況是第一個參數不為空,返回第一個參數的值

select nvl('','2') from dual   === 2

說明:第一個參數為空,返回第二個參數的值

select nvl('','') from dual   === null

說明:都為空則返回null

 如果能理解以上的方法理解了,那么coalesce函數就是nvl函數的嵌套使用

寫法如下:coalesce(name1,name2,name3,name4........)

第一個字段為空,取第二個字段,如果第二個字段為空取第三個字段......

基本寫法就是nvl函數的嵌套,我們根據nul的特性如果兩個參數返回的值都null,則返回null,只要遇到不為空的就返回對應的結果。寫法如下:

第一種寫法:nvl(nvl(Nvl(name1,name2),name3),name4)

第二種寫法:coalesce(name1,name2,name3,name4)

說明:這樣嵌套直到遇到不為空的數據返回對應的值

 

下面是具體的案例,以第一種為例:

select t.*, nvl(nvl(nvl(bond_code, cash_code), repo_code), fund_code)

  from (select bs.i_code,

               bs.rt_l_avaamount,

               bs.m_type,

               bs.a_type,

               b.i_code          bond_code,

               c.i_code          cash_code,

               i.i_code          repo_code,

               f.i_code          fund_code

          from xir_trd.ttrd_acc_balance_secu bs

          left join xir_md.tbnd b

            on b.i_code = bs.i_code

          left join xir_trd.ttrd_cashlb c

            on c.i_code = bs.i_code

          left join xir_trd.ttrd_otc_iblb i

            on i.i_code = bs.i_code

           and bs.rt_l_avaamount >= 0

          left join xir_md.tfnd f

            on f.i_code = bs.i_code

         where bs.accid = 'xecs_nbzq') t

 where (bond_code is not null or cash_code is not null or

       repo_code is not null or fund_code is not null)

以下是查詢結果:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM