Null表示無值,為空
0表示有實際存在的值值為0
例如:查詢沒有獎金的雇員
Select empno eename,comm
from emp
where comm=0 or comm is null
uj5u.com熱心網友回復:
感謝分享!
uj5u.com熱心網友回復:
加補一條,曾經我遇到過這樣的一個問題,從sql server轉移資料庫到oracle時發生的(用透明網關直接全部梭哈的那種資料轉移),sql server的空(NULL)轉到oracle后,在oracle資料庫里面NULL變為空字符(asc碼為0的那個字符)。此時在oracle內查詢為空字符,不能復制粘貼,不能用 is null判斷,要篩選此類資料可用函式ascii(欄位名)=0uj5u.com熱心網友回復:
oracle里面的空字串''和空NULL是等價的,條件中可以寫='',也可以寫is null,很多資料庫這兩者不一樣
uj5u.com熱心網友回復:
萬惡的NULL,會引發好多問題,性能問題、邏輯問題。盡量讓系統中的NULL值少一些,如果實在不可避免,就用其它欄位規避。比如作業流中的審批流程,最好不要用審批意見是否為NULL判斷具體的節點,而是用具體的欄位判斷。
uj5u.com熱心網友回復:
加補一條,曾經我遇到過這樣的一個問題,從sql server轉移資料庫到oracle時發生的(用透明網關直接全部梭哈的那種資料轉移),sql server的空(NULL)轉到oracle后,在oracle資料庫里面NULL變為空字符(asc碼為0的那個字符)。此時在oracle內查詢為空字符,不能復制粘貼,不能用 is null判斷,要篩選此類資料可用函式ascii(欄位名)=0并不是等價的哦,空字串的ascii碼是0,但是null的ascii碼還是null,由此通過asc碼就可以看出空字串和null是兩個看起來長得一樣的資料,但實際上是不一樣的資料,且空字串插入到oracle一般是存入的null而不是空字串,輸入法沒辦法打出來,我那次偶遇到這種空字串資料是因為sql server轉oracle時透明網關的問題,將null轉成空字串插入到oracle的表欄位中,我試過多次,無法用=''或者is null判斷,但可以用ascii(欄位名)=0來查詢出
uj5u.com熱心網友回復:
SQL> drop table test purge;
Table dropped.
SQL> create table test( x varchar2(10));
Table created.
SQL> insert into test values(null);
1 row created.
SQL> insert into test values('');
1 row created.
SQL> commit;
Commit complete.
SQL> select * from test;
X
----------
SQL> select count(*) from test;
COUNT(*)
----------
2
SQL> select count(*) from test where x is null;
COUNT(*)
----------
2
SQL> select count(*) from test where x='';
COUNT(*)
----------
0
SQL> select dump(x) from test;
DUMP(X)
--------------------------------------------------------------------------------
NULL
NULL
SQL> insert into test values('111');
1 row created.
SQL> update test set x='' where x='111';
1 row updated.
SQL> commit;
Commit complete.
SQL> select dump(x) from test;
DUMP(X)
--------------------------------------------------------------------------------
NULL
NULL
NULL
SQL>
我上面說的確實有點問題:where條件里的x=''這種寫法和is null不等價。
不過insert和update的時候使用''空字串即代表null
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/36494.html
標籤:高級技術
上一篇:oracle分批匯出問題
