sqlserver not in和<>获取null值问题

如下person表

  • 查询所有年龄不是15,22的人的名字

如果使用如下写法,我们会发现无法得到预期的结果。

not in


SELECT *
FROM person
WHERE age NOT IN (15, 22)

那是因为在not in子查询中如果出现NULL,则不会返回记录。

<>

  • 如果使用<>时也不会返回记录。因为NULL参与比较运算时,结果视为FALSE。

NULL参与算术运算时表达式结果为NULL。


SELECT *
FROM person
WHERE age <> 15
	AND age <> 22

解决方案

所以为了避免这个问题我们可以使用ISNULL函数,ISNULL(age,''),当age是NULL则会返回一个空字符串。


SELECT *
FROM person
WHERE ISNULL(age,'') <> 15 AND ISNULL(age,'') <> 22

SELECT *
FROM person
WHERE ISNULL(age,'') NOT IN (15, 22)

posted @ 2020-08-07 10:58  可爱的黑精灵  阅读(822)  评论(0)    收藏  举报