【轉】oracle中的NULL、''(空字符串)以及'_'(空格)

  在Oracle中使用null,''(空字符串),'_'(空格)時,有沒有遇到問題?產生疑惑?oracle

一、NULL和''(空字符串)是一個意思函數

  注:爲了便於區分空字符串和空格,下面的示例均以'_'表明空格。spa

  舉個例子:.net

1 --建表
2         create table tbl_a (col_a varchar2(1), col_b int);  
3     
4         --  造數據
5         insert into tbl_a values(‘_’, 1); --  插入空格
6         insert into tbl_a values(‘’, 2); --  插入空字符串
7         insert into tbl_a values(null, 3); --  插入NULL

  以上SQL執行成功後,執行select來檢查:3d

1 select count(*) from tbl_a; -- 結果是 3 
2 select count(*) from tbl_a where col_a = ‘_’;  -- 結果是 1 
3 select count(*) from tbl_a where col_a = ‘’;  -- 結果是 0 
4 select count(*) from tbl_a where col_a is null; -- 結果是 2 

  注意:因爲''(空字符串)默認被轉換成了NULL,不能使用 = ''做爲查詢條件。也不能用 is ''。雖然不會有語法錯誤,可是不會有結果集返回。只能用is null,不等於就是 is not null。code

  進一步驗證:blog

select nvl(col_a, ‘a’) from tbl_a; 

  結果:排序

  原來,在Oracle中,null和''(空字符串)是一個意思。字符串

二、分析函數與NULLget

  在使用AVG,MAX,SUM,COUNT等函數時,爲NULL的記錄會被忽略。

  再插入幾條數據:

1 insert into tbl_a values(null, null); --  插入NULL
2 -- 執行成功。
3 -- 再次證實,’’ 被看成了null處理.
4 -- 由於該字段是 int 類型,若是是字符串,執行會報錯
5 insert into tbl_a values(‘a’, ‘’); 

  查看數據:

select * from tbl_a; 

  結果以下:

  注:_表明空格,其他空白處表示NULL

  驗證:

1 select AVG(col_b) from tbl_a; -- 結果爲 2 ,NULL的紀錄行忽略掉了
2 select MAX(col_b) from tbl_a; -- 結果爲 3
3 select SUM(col_b) from tbl_a; -- 結果爲 6
4 select COUNT(col_b) from tbl_a; -- 結果爲 3 
5 select COUNT(col_a) from tbl_a; -- 結果爲 2
6 select COUNT(*) from tbl_a; -- 結果爲 5

三、排序時,NULL做爲無窮大處理

  例:

select * from tbl_a order by col_b desc ; 

  結果以下:

 

轉載自《oracle中的NULL、''(空字符串)以及'_'(空格)

相關文章
相關標籤/搜索