oracle函數NVL,NVL2和NULLIF之間的區別和使用


oracle用這么幾個函數,可以幫助我們解決數據上null或0的處理

1、NVL()函數

 1.1)介紹:NVL(expr1,expr2),若expr1為null, 返回expr2; 不為null,返回expr1。  注意:兩者類型要一致

 1.2)用法:

--expr1為空,返回expr2,結果:'未知'--
select NVL(null,'未知') SexType from dual;
--expr1不為空,返回expr1, 結果:1 --
select NVL('1','2') SexType from dual;

 1.3)實際應用:

如:我們查詢表數據出現這種結果,某個字段若為null,返回0

--未加函數時情況 -- select A.UseFlag 使用標志,A.NAME 單據名稱 from Dxc_Receive_Notice A

若字段不為null,直接返回字段本身

--加函數時情況,要求(field 為null,返回0 ;field 不為null,返回本身) -- select NVL(A.UseFlag,'0') 使用標志,A.NAME 單據名稱 from Dxc_Receive_Notice A

 

 

2、NVL2 函數

2.1)介紹:NVL2 (expr1, expr2, expr3),若expr1不為NULL,返回expr2 ;為NULL,返回expr3。注意:expr2 和expr3 類型不同的話,expr3 會轉換為expr2 的類型

2.2)用法:

  --不為null時,返回expr2 ,結果:1
  select NVL2(0,1,2) from dual;
 --為null時,返回expr3 ,結果:2
 select NVL2(null,1,2) from dual;

2.3)實際應用

將查詢結果中字段若為null,返回0

--未加函數時情況 -- select A.UseFlag 使用標志,A.NAME 單據名稱 from Dxc_Receive_Notice A

若字段不為null,直接返回字段本身

 --應用到實際查詢中,要求(field 為null,返回0; field 不為null,返回本身)
 select NVL2(A.UseFlag,A.UseFlag,'0') 使用標志,A.NAME 單據名稱 from Dxc_Receive_Notice A

 

3、NULLIF函數

3.1)介紹:NULLIF (expr1, expr2),若expr1和expr2相等,返回NULL;不相等,等返回expr1

3.2)用法:

--相等時,返回結果: null --
 select NULLIF(1,1) from dual;
  --不相等時,返回結果: 1 --
 select NULLIF(1,2) from dual;

 3.3)實際應用

 將查詢結果中字段為‘0001/1/1’,返回null

 --未加函數查詢結果 要求(將日期類型默認'0001/1/1',改成null,不相等,返回本身日期)---
 select A.RECEIVEDATE 收貨日期,A.NAME 單據名稱 from Dxc_Receive_Notice A

若字段不為‘‘0001/1/1’,返回字段本身

 --添加函數查詢結果,要求(將日期類型默認'0001/1/1',改成null,不相等,返回本身日期)--
  select NULLIF(A.RECEIVEDATE,TO_DATE('0001/1/1','yyyy-mm-dd hh24:mi:ss')) 收貨日期,A.NAME 單據名稱 from Dxc_Receive_Notice A

 


免責聲明!

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



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