我理解为什么这两个陈述是错误的
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
答案 0 :(得分:7)
SQL使用three-valued logic。你说这些都是假的:
NULL LIKE 'X'
NULL NOT LIKE 'X'
NOT (NULL LIKE 'X')
NOT (NULL NOT LIKE 'X')
但事实并非如此。它们都是null,既不是也不是 false。
WHEN
或WHERE
子句拒绝非真值,这意味着空值和虚值,所以看起来像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,我们不知道它们相等)