我們都知道sql server中null是乙個很特殊的存在,因為null不會等於任何值,且null也不會不等於任何值。對於null我們只能使用is或is not關鍵字來進行比較。
我們先來看看下面乙個sql查詢,由於null不會等於任何值,所以毫無疑問下面的查詢會返回0:
select輸出結果:case
when
null=1
then
1else
0end
那麼如果我們在上面查詢的基礎上,給判斷條件null=1前加上not關鍵字效果如何呢?如下所示:
select輸出結果:case
when
notnull=1
then
1else
0end
我們可以看到輸出還是0,有些同學可能會覺得很奇怪,判斷條件null=1不是返回false嗎,那麼not null=1應該返回true才對啊?那麼我們試試在判斷條件null=1前加兩個not關鍵字試試:
select輸出結果:case
when
notnot
null=1
then
1else
0end
結果顯示判斷條件not not null=1,還是返回的false,事實上無論我們在null=1前面加多少個not關鍵字,判斷條件not ... not null=1都會返回false。
因為我們前面說了null不會等於任何值,且null也不會不等於任何值,所以除了用is或is not關鍵字來比較null,所有其它比較運算子對null進行的比較都是無效的,null會讓整個表示式都返回false,所以無論我們在判斷條件null=1前面加多少個not關鍵字都沒有用,因為整個not ... not null=1表示式都會返回false。
雖然上面我們看到null會讓整個判斷表示式都返回false,但是它並不會干擾由or或and關鍵字分隔的其它判斷條件,例如:
select輸出結果:case
when (not
notnull
=1) or (1=1
and2
=2) then
1else
0end
SQL Server 中NULL的比較問題
sql server,null值並不是乙個值,而是表示特定含義,其所表示的含義是 unknow 可以理解為未定義或者未知,因此任何與null值進行比對的二元操作符結果一定為null,包括null值本身。而在sql server中,null值的含義轉換為bool型別的結果為false select 有...
sql server 資料庫中null 轉換為 0
在開發時遇到乙個這樣的問題,一張表a中有兩個money型別的資料字段,有些值是null,結果用 select columna columnb from a 得到的結果集中,當 columna columnb 其中乙個是null時,結果就為null 而我的本意是,null當成0計算 這樣就可以了 se...
hive中的NULL分析
hive中有種假null,它看起來和null一摸一樣,但是實際卻不是null。空值null在底層預設是用 n 來儲存的,hive中 是轉義字元,需要對 進行一次轉義,所以變成 n 如果實際想儲存 n 那麼實際查詢出來的也是null而不是 n 修改預設的null表示 alter table test ...