1. 程式人生 > >關於oracle中 != 及 null 使用注意點

關於oracle中 != 及 null 使用注意點

titlestepname 

關於繼續開展下半年度集團早高峰保駕工作的通知傳閱

 關於繼續開展下半年度集團早高峰保駕工作的通知null

關於配合國資委協同辦公平臺統一許可權配置的相關事宜null

執行如下語句:

select t.title,t.stepname from t_todo_item t where t.loginname='ST/G00100000161' and t.stepname!='傳閱'

返回結果為空;

執行如下語句,結果才是希望得到的結果(stepName!='傳閱')

select t.title,t.stepname from t_todo_item t where t.loginname='ST/G00100000161' and (t.stepname!='傳閱' or t.stepname is null)

 關於繼續開展下半年度集團早高峰保駕工作的通知null
關於配合國資委協同辦公平臺統一許可權配置的相關事宜null

因為null 不能用 = 或 != 來作為判斷,只能使用 is null 或者 is not null

所以當 stepname!='傳閱'時,null 未符合條件,故第一句的sql 是錯誤的。

也可以使用 nvl 函式

select t.title,t.stepname from t_todo_item t where t.loginname='ST/G00100000161' and nvl(t.stepname,'123')!='傳閱'

總之,需要注意的就是 oracle 中的 null 不能用 =及!=用來比較 ,只能使用is null 或者 is not null,

當欄位中有null時,需要區別對待。

說明: 
1、等價於沒有任何值、是未知數。 
2、NULL與0、空字串、空格都不同。 
3、對空值做加、減、乘、除等運算操作,結果仍為空。 
4、NULL的處理使用NVL函式。 
5、比較時使用關鍵字用“is null”和“is not null”。 
6、空值不能被索引,所以查詢時有些符合條件的資料可能查不出來,count(*)中,用nvl(列名,0)處理後再查。 
7、排序時比其他資料都大(索引預設是降序排列,小→大),所以NULL值總是排在最後。