oracle nvl()函數

海賊王 12年前發布 | 62K 次閱讀 orace Oracle 數據庫服務器
oracle中nvl()函數

oracle的nvl函數的用法

通過查詢獲得某個字段的合計值,如果這個值位null將給出一個預設的默認值
select nvl(sum(t.dwxhl),1) from tb_jhde t where zydm=-1
這里關心的nvl的用法,nvl(arg,value)代表如果前面的arg的值為null那么返回的值為后面的value
如: NVL(a,b)就是判斷a是否是NULL,如果不是返回a的值,如果是返回b的值 通過查詢獲得某個字段的合計值,如果這個值位null將給出一個預設的默認值

另一個有關的有用方法
declare
i integer
select nvl(sum(t.dwxhl),1) into i from tb_jhde t where zydm=-1
這樣就可以把獲得的合計值存儲到變量i中,如果查詢的值為null就把它的值設置為默認的1

Oracle下Nvl函數 nvl( ) 函數 從兩個表達式返回一個非 null 值。
語法
NVL(eExpression1, eExpression2)
參數
eExpression1, eExpression2
如 果 eExpression1 的計算結果為 null 值,則 NVL( ) 返回 eExpression2。如果 eExpression1 的計算結果不是 null 值,則返回 eExpression1。eExpression1 和 eExpression2 可以是任意一種數據類型。如果 eExpression1 與 eExpression2 的結果皆為 null 值,則 NVL( ) 返回 .NULL.。
返回值類型
字符型、日期型、日期時間型、數值型、貨幣型、邏輯型或 null 值
說明
在不支持 null 值或 null 值無關緊要的情況下,可以使用 NVL( ) 來移去計算或操作中的 null 值。 select nvl(a.name,'空得') as name from student a join school b on a.ID=b.ID 注意:兩個參數得類型要匹配 問:什么是NULL? 答:在我們不知道具體有什么數據的時候,也即未知,可以用NULL, 我們稱它為空,ORACLE中,含有空值的表列長度為零。
ORACLE允許任何一種數據類型的字段為空,除了以下兩種情況:

1、主鍵字段(primary key),

2、定義時已經加了NOT NULL限制條件的字段

說明:

1、等價于沒有任何值、是未知數。

2、NULL與0、空字符串、空格都不同。

3、對空值做加、減、乘、除等運算操作,結果仍為空。

4、NULL的處理使用NVL函數。

5、比較時使用關鍵字用“is null”和“is not null”。

6、空值不能被索引,所以查詢時有些符合條件的數據可能查不出來, count(*)中,用nvl(列名,0)處理后再查。

7、排序時比其他數據都大(索引默認是降序排列,小→大), 所以NULL值總是排在最后。
使用方法:
SQL> select 1 from dual where null=null; 沒有查到記錄
SQL> select 1 from dual where null=''; 沒有查到記錄
SQL> select 1 from dual where ''=''; 沒有查到記錄
SQL> select 1 from dual where null is null; 1 --------- 1
SQL> select 1 from dual where nvl(null,0)=nvl(null,0); 1 --------- 1
對空值做加、減、乘、除等運算操作,結果仍為空。
SQL> select 1+null from dual;
SQL> select 1-null from dual;
SQL> select 1*null from dual;
SQL> select 1/null from dual; 查詢到一個記錄. 注:這個記錄就是SQL語句中的那個null 設置某些列為空值 update table1 set 列1=NULL where 列1 is not null;
現有一個商品銷售表sale,表結構為: month  char(6)  --月份 sellnumber(10,2) --月銷售金額 create table sale (month char(6),sell number); insert into sale values('200001',1000); insert into sale values('200002',1100); insert into sale values('200003',1200); insert into sale values('200004',1300); insert into sale values('200005',1400); insert into sale values('200006',1500); insert into sale values('200007',1600); insert into sale values('200101',1100); insert into sale values('200202',1200); insert into sale values('200301',1300); insert into sale values('200008',1000); insert into sale(month) values('200009'); (注意:這條記錄的sell值為空)
commit; 共輸入12條記錄
SQL> select * from sale where sell like '%';
MONTH SELL ------ --------- 200001 1000 200002 1100 200003 1200 200004 1300 200005 1400 200006 1500 200007 1600 200101 1100 200202 1200 200301 1300 200008 1000
查詢到11記錄. 結果說明: 查詢結果說明此SQL語句查詢不出列值為NULL的字段 此時需對字段為NULL的情況另外處理。
SQL> select * from sale where sell like '%' or sell is null;
SQL> select * from sale where nvl(sell,0) like '%';
MONTH SELL ------ --------- 200001 1000 200002 1100 200003 1200 200004 1300 200005 1400 200006 1500 200007 1600 200101 1100 200202 1200 200301 1300 200008 1000 200009 查詢到12記錄. Oracle的空值就是這么的用法,我們最好熟悉它的約定,以防查出的結果不正確

 本文由用戶 海賊王 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!