首页 > 解决方案 > IS NULL 时的 SQL Server Case Statement - 其他 SO 问题不能解决此问题

问题描述

SO上有2个问题,但它们不同,并不能解决这个问题。在将其标记为重复之前,请随意对其进行测试。

这个问题有一个SQLFiddle

在此示例中,手机号码可能为 NULL

ID 姓名 细胞
1 约翰 123
2 莎莉 无效的

当单元格编号不为空时,查询有效:

DECLARE @Cell NVARCHAR(100) = '123'

SELECT * 
FROM Temp
WHERE Cell = CASE WHEN @Cell IS NULL THEN NULL ELSE @Cell END

当单元格编号为空时,相同的查询将失败。

DECLARE @Cell NVARCHAR(100) = NULL

SELECT * 
FROM Temp
WHERE Cell = CASE WHEN @Cell IS NULL THEN NULL ELSE @Cell END

问题是如何让CASE WHENNULL 以及在比较实际值时都起作用。请注意,这是实际问题的简化示例(具有更多条件和额外的复杂性),重点是通过修改来使示例正常工作,CASE WHEN以解决实际问题。

标签: sql-servernullcase

解决方案


NULL不等于任何东西,包括NULL但你可以检查是否有东西NULL

WHERE (@Cell IS NULL AND Cell IS NULL) OR Cell = @Cell

可能也可以将比较移到里面CASE,但这至少在含义上是明确的。


推荐阅读