SQL 中 NULL值測試代碼
更新時間:2011年04月14日 23:30:44 作者:
在SQL語句中,where 子句:where t.modifier = null ,這里不可以使用NULL關(guān)鍵字,因?yàn)樗皇且粋€真正的值,它僅僅是一個符號,因?yàn)樗闹凳俏粗摹?/div>
剛剛想從數(shù)據(jù)庫中的表EXPERT_DETAILS中檢索出修改人Modifier(類型 VARCHAR2(20),可為空)為空的那些記錄,因?yàn)樵撟侄蔚念愋蜑閂ARCHAR2(20),我使用的SQL語句為
select * from expert_details twhere t.modifier = ''
沒有檢索出一條記錄,而這與存儲在該表中的記錄是不相符的。后來想到即便是空字符型存儲在數(shù)據(jù)庫中也應(yīng)該是NULL而不是''。
然后我使用下列SQL 語句,仍然沒有檢索出一條記錄。
select * from expert_details t
where t.modifier = null
最后我想到了SQL中的NULL 值測試。使用如下語句,終于檢索出了想要的結(jié)果。
select * from expert_details t
where t.modifier is null
在SQL語句中,where 子句:where t.modifier = null ,這里不可以使用NULL關(guān)鍵字,因?yàn)樗皇且粋€真正的值,它僅僅是一個符號,因?yàn)樗闹凳俏粗?。?dāng)t.modifier本身就是null時,即where子句為:where null= null ,當(dāng)?shù)忍杻蛇叺闹刀际俏粗臅r候,結(jié)果是TRUE還是FALSE,SQL不能給出一個明確的結(jié)果,所以查詢出的結(jié)果也為NULL。
因此必須明確使用NULL值測試即 字段 IS NULL 或者其否定形式 字段 IS NOT NULL 來檢測NULL值。
復(fù)制代碼 代碼如下:
select * from expert_details twhere t.modifier = ''
沒有檢索出一條記錄,而這與存儲在該表中的記錄是不相符的。后來想到即便是空字符型存儲在數(shù)據(jù)庫中也應(yīng)該是NULL而不是''。
然后我使用下列SQL 語句,仍然沒有檢索出一條記錄。
復(fù)制代碼 代碼如下:
select * from expert_details t
where t.modifier = null
最后我想到了SQL中的NULL 值測試。使用如下語句,終于檢索出了想要的結(jié)果。
復(fù)制代碼 代碼如下:
select * from expert_details t
where t.modifier is null
在SQL語句中,where 子句:where t.modifier = null ,這里不可以使用NULL關(guān)鍵字,因?yàn)樗皇且粋€真正的值,它僅僅是一個符號,因?yàn)樗闹凳俏粗?。?dāng)t.modifier本身就是null時,即where子句為:where null= null ,當(dāng)?shù)忍杻蛇叺闹刀际俏粗臅r候,結(jié)果是TRUE還是FALSE,SQL不能給出一個明確的結(jié)果,所以查詢出的結(jié)果也為NULL。
因此必須明確使用NULL值測試即 字段 IS NULL 或者其否定形式 字段 IS NOT NULL 來檢測NULL值。
相關(guān)文章
SQL Server誤區(qū)30日談 第1天 正在運(yùn)行的事務(wù)在服務(wù)器故障轉(zhuǎn)移后繼續(xù)執(zhí)行
每次故障轉(zhuǎn)移都伴隨著某種形式的恢復(fù)。但是如果當(dāng)正在執(zhí)行的事務(wù)沒有Commit時,由于服務(wù)器或?qū)嵗罎?dǎo)致連接斷開,SQL Server可沒有辦法在故障轉(zhuǎn)移后的服務(wù)器重新建立事務(wù)的上下文并繼續(xù)執(zhí)行事務(wù)-無論你使用的故障轉(zhuǎn)移方式是集群,鏡像,日志傳送或是SAN復(fù)制2013-01-01uniqueidentifier轉(zhuǎn)換成varchar數(shù)據(jù)類型的sql語句
uniqueidentifier轉(zhuǎn)換成varchar數(shù)據(jù)類型的sql語句,需要的朋友可以參考下。2011-09-09