为什么“Null Like X”和“Not(Null Like X)”相同?

时间:2012-08-23 19:43:37

标签: sql null sql-like

我理解为什么这两个陈述是错误的

NULL LIKE 'X'
NULL NOT LIKE 'X'

然而,我不明白的原因是:

NOT (NULL LIKE 'X')
NOT (NULL NOT LIKE 'X')

例如,我认为这两个陈述应该返回不同的值:

SELECT CASE WHEN NOT (NULL LIKE 'X') THEN 'True' ELSE 'False' END
SELECT CASE WHEN     (NULL LIKE 'X') THEN 'True' ELSE 'False' END

3 个答案:

答案 0 :(得分:7)

SQL使用three-valued logic。你说这些都是假的:

NULL LIKE 'X'
NULL NOT LIKE 'X'
NOT (NULL LIKE 'X')
NOT (NULL NOT LIKE 'X')

但事实并非如此。它们都是null,既不也不是 false。

WHENWHERE子句拒绝非真值,这意味着空值和虚值,所以看起来像null和false一样,但是你已经注意到了, 不是。 : - )

答案 1 :(得分:2)

NULL总是NULL你无法将它与类似的东西进行比较。这不是真或假,而是你正在寻找的答案。

就像你无法比较一样,这总是会返回零行,因为NULL是一个未知值。

SELECT *
FROM yourTable 
WHERE yourCol = NULL

答案 2 :(得分:2)

NULL始终未定义。

所以

的价值
not (NULL like X) is undefined

以及

not (NULL not like X) is undefined

Undefined的最佳近似值为NULL,因此两个语句都计算为NULL(不,你明白,等于NULL,我们不知道它们相等)