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)


浙公网安备 33010602011771号