Jim*_*m B 4 sql comparison null sql-server-2005
这更像是一个满足我自己好奇心的问题.鉴于以下声明:
DECLARE @result BIT
SET @result = CASE WHEN NULL <> 4 THEN 0
ELSE 1
END
PRINT @result
Run Code Online (Sandbox Code Playgroud)
为什么我回到"1"而不是"0"
将其更改为:
DECLARE @result BIT
SET @result = CASE WHEN NULL IS NULL
OR NULL <> 4 THEN 0
ELSE 1
END
PRINT @result
Run Code Online (Sandbox Code Playgroud)
正确地给我回"0"
我知道NULL比较可能很棘手,但这个特殊的例子在我们的代码审查过程中滑落了.
任何澄清将不胜感激
这是因为3值逻辑.在第一种情况下,Unknown不会评估为true,因此您最终会进入else
DECLARE @result BIT
SET @result = CASE WHEN Unknown THEN 0
ELSE 1
END
PRINT @result
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,您执行True或Unknown,其值为true.
DECLARE @result BIT
SET @result = CASE WHEN True
OR Unknown THEN 0
ELSE 1
END
PRINT @result
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1982 次 |
| 最近记录: |