1. 程式人生 > >oracle函數NVL,NVL2和NULLIF之間的區別和使用

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

style nbsp from oracl expr nvl2 出現 圖片 null

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

技術分享圖片

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