1. 程式人生 > >在oracle中用like模糊搜尋時如何使其能搜到空值?

在oracle中用like模糊搜尋時如何使其能搜到空值?

空(即NULL)跟空字串(即‘’)是不一樣的概念,SQL裡空用 IS NULL來判斷,即判斷一個列值是否為null,只能用“列名
IS NULL”或是“列名  IS not NULL”,不能用其他方式,例如,不能用“列名 =null”或是“列名 !=null”。

假設test表裡存在id1為null的資料行,則
select * from test where id1   =null;
select * from test where id1 !=null;
顯示的結果都是為0行已被選擇,這說明
 id1   =null 和
 id1   !=null
這兩個條件始終為假。
含有其他的操作運算子的條件也是始終為假:
select * from test where id1   <    null;
select * from test where id1   like null;
顯示的結果也都是為0行已被選擇。

註釋:
select * from test where id1   =null;
select * from test where id1 !=null;
顯示的結果都是為0行已被選擇
從邏輯上看,兩者顯示的結果是矛盾的:
既然id1=null時顯示的行數為0,那麼說明資料行裡的id1列列值不為null,那
id1 !=null
時顯示的行數應該不為0才對。
但是其實這個不能從邏輯上去分析,這個結果只是oracle在設計程式設計時的一個規定:
凡是和null做比較的操作符的條件都是為假,除了is null和is not null兩個操作符外。



null的含義,在我們不知道具體有什麼資料,也即未知,稱他為空,oracle中,含有空值的表列長度為零。

等價於沒有任何值,是未知數,null與0,空字串,空格不同,對空值做運算,結果仍然是空值,oracle提供了處理空值函式nvl,比較時候用 is null或者 is not null.

未給一個(某種資料型別)變數定一個值,則就用null這個關鍵字來表示,區別於未賦值的變數,
未賦值的變數是說程式設計師沒給變數顯示賦值而由系統來給其賦值一個隨機值。
null的特性就是所謂未定型一切(值)皆有可能。
空字串則只是各種定型的字串中的一個。