我明白为什么这两个陈述是错误的
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
最佳答案
SQL 使用 three-valued logic .你说这些都是假的:
NULL LIKE 'X'
NULL NOT LIKE 'X'
NOT (NULL LIKE 'X')
NOT (NULL NOT LIKE 'X')
但事实并非如此。它们都是空的,这既不真实也不虚假。
A
WHEN
或 WHERE
子句拒绝非真值,这意味着 null 值和 false 值,所以看起来 null 与 false 相同,但正如您所注意到的,事实并非如此。 :-)
关于sql - 为什么 "Null Like X"和 "Not (Null Like X)"相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12098887/