關於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值總是排在最後。