sql-server – SQL Server将不等于<>的行返回值和NULL

前端之家收集整理的这篇文章主要介绍了sql-server – SQL Server将不等于<>的行返回值和NULL前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个表的列可以是rowTypeID =(1,2,3或null)的值列.我想编写一个返回任何没有值为3的行的查询.在这个例子中,我想要所有的NULL行以及所有的1,2行,我只是不希望值为3的行

当前为数据库设置ANSI空值ON.

我很好奇为什么我不能写

select * from myTable where myCol <> 3

查询不会返回myCol列中具有NULL的任何行

我必须写

select * from my Table where myCol <> 3 or myCol Is NULL

我总是必须包含IS NULL或者我可以设置它,因此where子句myCol 3将返回具有Null的行作为我的Col的值

解决方法

我认为你的做法很好:
SELECT *
FROM MyTable
WHERE myCol <> 3 OR myCol IS NULL

由于您要求替代方案,所以执行此操作的另一种方法是使列不为NULL,并在数据库中存储另一个(otherwised未使用的)值,而不是NULL – 例如-1.然后,表达式myCol<> 3将匹配您的假NULL,就像它与任何其他值一样.

SELECT *
FROM MyTable
WHERE myCol <> 3

然而,一般来说,我建议不要使用这种方法.你已经在做的方式是正确的方法.

另外值得一提的是,其他几个数据库支持IS DISTINCT FROM,它们完全符合您的要求:

SELECT *
FROM MyTable
WHERE myCol IS DISTINCT FROM 3

MysqLNULL-safe equal也可以用于这个目的:

SELECT *
FROM MyTable
WHERE NOT myCol <=> 3

不幸的是,sql Server不支持这些语法之一.

猜你在找的MsSQL相关文章