sql - 为什么 "Null Like X"和 "Not (Null Like X)"相等?

标签 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

最佳答案

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

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

但事实并非如此。它们都是空的,这既不真实也不虚假。

A WHENWHERE子句拒绝非真值,这意味着 null 值和 false 值,所以看起来 null 与 false 相同,但正如您所注意到的,事实并非如此。 :-)

关于sql - 为什么 "Null Like X"和 "Not (Null Like X)"相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12098887/

相关文章:

r - 从 R 中具有某些 NULL 值的对象创建数据框

mysql - 在mysql LIKE查询中获取最匹配的结果

node.js - 如何在 postgresql 和 node js 中进行类似搜索

mysql - 应选择从端点 Id 到其所有父节点的递归查询

php - 如何从数据库中获取特定行?

Python - 添加空值

c# - 项目之间的 Type.GetType() 可见性问题 (Visual C#)

MYSQL CSV 列检查排除

sql - SQL Server 2000 中用于存储视频的数据类型

java - UCanAccess异常: cannot getMetaData from ResultSet (invalid cursor state)