2011-03-28 56 views

回答

5

怎麼能這兩個哪來的是 」假「?

這不是! 答案也不是「真」! 答案是「我們不知道」。

NULL想象成你還不知道的值。

你敢打賭它是''

你敢打賭這不是''

因此,更安全的是宣佈你還不知道。因此,這兩個問題的答案都不是錯誤的,但我不知道,例如。 SQL中的NULL

0

因爲與NULL任何比較返回false(或者更準確地說:返回NULL)

爲空是沒有的,你不能告訴是否等於或不等於什麼信息。

+0

我覺得很奇怪,我認爲(沒有信息)=(信息) – JeremyWeir 2011-03-28 21:29:50

+1

@jayrdub:認爲它是這樣的:如果你沒有自己的飛船,如何能你知道太空船有哪種顏色?它既不是白色也不是白色。 – 2011-03-28 21:31:01

+2

但我擁有一艘太空船。謝謝,這有幫助。 – JeremyWeir 2011-03-28 21:32:13

1

SQL標準規定NULL = x是假的所有x(即使x本身NULL)和SQL Server只是遵循標準。如果你想檢查是否有或不是NULL,那麼你必須使用x IS NULLx IS NOT NULL

0

可能變得有點重複這裏,但我的兩分錢反正:

A. a_horse_with_no_name的例子(註釋,上面)是一個非常好的一個!

B.在非=數學術語中,NULL是未知值。一個空字符串是一個長度爲零的字符串 - 因此是一個「已知」值。這就是爲什麼NULL不會與空字符串相同或不相等。

C.由於NULL表示未知,所以不可能比較兩個NULL值是否相等。如果你不知道X的價值,並且你不知道Y的價值,那麼你不知道它們是否平等。

3

因爲這是SQL Server的符合ANSI SQL ;-)

NULL在SQL實例有點類似於IEEE楠比較規則:NaN != NaNNaN == NaN都是假的。它需要SQL中的特殊運算符IS NULL(或IEEE FP的"IsNaN")來檢測這些特殊值。(其實有多種方法來檢測這些特殊值:IS NULL/"IsNaN"只是乾淨和簡單的方法。)

然而,NULL = x更進了一步:NULL =/<> x結果是不假。相反,表達式的結果是本身NULL UNKNOWN。因此,NOT(NULL = '')NULL UNKNOWN(或在「上下文中的」false「 - 請參閱評論)。歡迎SQL tri-state logic ;-)

的世界因爲問題是有關SQL Server,然後完整性:如果運行與"SET ANSI_NULLS OFF"運行 - 但看到上面的言論/警告 - 那麼「原始」 TSQL行爲達到。

「原始」 的行爲(這是過時):

SET ANSI_NULLS OFF; 
select 'eq' where null = '';  -- no output 
select 'ne' where null <> '';  -- output: ne 
select 'not' where not(null = ''); -- output: not; null = '' -> False, not(False) -> True 

ANSI-NULL的行爲(默認在最近的東西,請使用):

SET ANSI_NULLS ON; 
select 'eq' where null = '';  -- no output 
select 'ne' where null <> '';  -- no output 
select 'not' where not(null = ''); -- no output; null = '' -> Unknown, not(Unknown) -> Unknown 

編碼愉快。

+0

好點,謝謝 – JeremyWeir 2011-03-28 21:37:57

+2

'NULL = x'的計算結果爲UNKNOWN。在'WHERE'上下文中,結果是行被從結果集中移除。在約束上下文中,效果是對行的更新不會失敗。 – onedaywhen 2011-03-29 07:51:54

+0

@onedaywhen感謝您的更正。我已經適當地更新了答案。 – 2011-03-29 19:54:59