Sql Server:与NULL比较时,CASE语句执行意外行为

aar*_*ona 1 sql sql-server null case-statement

鉴于:

以下Select语句:

select case NULL
       when NULL then 0
       else 1
       end
Run Code Online (Sandbox Code Playgroud)

问题:

我希望这会返回0,但它返回1.什么给出?

g.d*_*d.c 9

一般来说,NULL不是你应该尝试比较相等的东西,这是case语句的作用.您可以使用"Is NULL"来测试它.没有期望NULL != NULL或那个NULL = NULL.这是一个不确定的,未定义的值,而不是一个常数.

- 在评论中包含问题 -

如果您在遇到NULL列时需要检索值,请尝试以下方法:

Case
  When SomeColumn IS NULL
  Then 0
  Else 1
End
Run Code Online (Sandbox Code Playgroud)

我认为应该有用.就你原来的帖子而言:

Select Case NULL
  When NULL then 0 // Checks for NULL = NULL
  else 1 // NULL = NULL is not true (technically, undefined), else happens
end
Run Code Online (Sandbox Code Playgroud)

问题是您的Case select会自动尝试使用相等操作.这根本不适用于NULL.

  • @DJTripleThreat在`CASE WHEN SomeColumn IS NULL`(检查列是否已分配'NULL`)和`CASE SomeColumn WHEN NULL`(检查列*是否等于*`NULL`)之间存在很大差异.使用以前的语法来获得可预测的结果. (2认同)