SQL Server 2005 - 在比较中使用 Null

标签 sql sql-server-2005 comparison null

这更多是为了满足我自己的好奇心。鉴于以下声明:

DECLARE @result BIT
SET @result = CASE WHEN NULL <> 4 THEN 0
                   ELSE 1
              END
PRINT @result

为什么我得到“1”而不是“0”

将其更改为:
DECLARE @result BIT
SET @result = CASE WHEN NULL IS NULL
                        OR NULL <> 4 THEN 0
                   ELSE 1
              END
PRINT @result

正确地给我回“0”

我知道 NULL 比较可能很棘手,但是这个特殊的例子在我们的代码审查过程中漏掉了。

任何澄清将不胜感激

最佳答案

这是因为 3 valued logic .在第一种情况下 Unknown 不会评估为 true 所以你最终在 else

DECLARE @result BIT
SET @result = CASE WHEN Unknown THEN 0
                   ELSE 1
              END
PRINT @result

在第二种情况下,您正在执行 True 或 Unknown,其计算结果为 true。
DECLARE @result BIT
SET @result = CASE WHEN True
                        OR Unknown THEN 0
                   ELSE 1
              END
PRINT @result

关于SQL Server 2005 - 在比较中使用 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2976333/

相关文章:

python - 如何衡量两个 python 代码块之间的相似性?

SQL 2005 CTE 与 TEMP 表用于其他表的联接时的性能

c# - 连接 SQL 查询中一个字段的多个结果

oracle - 不区分大小写和重音的 'like' 比较 oracle 而不改变 oracle 上的 session

mysql - 组合两个 MySQL 查询以显示每个列的一个唯一值和一个 AVG 值

sql - 如何根据条件更新列

Java/SQL 字符串操作使 "Foo".equals ("Bar???")

mysql/postgres窗口函数限制没有子查询的结果

sql - SQL Server 2005 查询的性能

f# - F# + 可变字段记录中的相等推理