Oracle nvl 函式的用法

2021-08-27 23:13:26 字數 4121 閱讀 4125

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

notnull」。

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

isnull; 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

notnull;

現有乙個商品銷售表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值為空)

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 rows selected.

查詢到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

month sell

------

----------

200009

12 rows selected.

oracle的空值就是這麼的用法,我們最好熟悉它的約定,以防查出的結果不正確

Oracle Nvl 函式用法

oracle nvl 函式用法 文章分類 資料庫 nvl 函式 從兩個表示式返回乙個非 null 值。語法 nvl eexpression1,eexpression2 引數 eexpression1,eexpression2 如果 eexpression1 的計算結果為 null 值,則 nvl 返...

oracle NVL與Coalesce的區別

先來說一下用法上的區別 nvl commission pct,0 如果第乙個引數為null,則返回第二個引數 如果第乙個引數為非null,則返回第乙個引數 coalesce expr1,expr2,expr3.exprn 從左往右數,遇到第乙個非null值,則返回該非null值。多層判斷 第一點區別...

函式的用法 INDEXC函式的用法

1 製作小 箱 如何利用excel製作簡單的小 箱?這裡與大家分享借用index函式來實現。在單元格中輸入公式 index a2 a17,randbetween 2,counta a2 a17 公式說明 counta函式表示統計非空單元格格式 randbetween函式表示隨機生成整數 2 隔行提取...