如何筛选包含空值和其他状态的记录

时间:2016-06-22 19:29:14

标签: sql sql-server

目前我在sql server中运行以下查询。如何过滤checkpointstatus不是'已完成',包括null值。但问题是我无法获得值为null的记录。

  SELECT * FROM TAMS.OrderDetail WHERE CheckPointStatus != 'Completed'

我试图解决这个问题:

  SELECT * FROM TAMS.OrderDetail WHERE coalesce(CheckPointStatus, '') !=  'Completed'

但只是想确定这是正确的方法吗?

2 个答案:

答案 0 :(得分:4)

尝试以下方法之一:

方法1。

JLabel

方法2。(SQL Server 2008及更高版本)使用ISNULL函数。

SELECT * FROM TAMS.OrderDetail WHERE CheckPointStatus != 'Completed' 
                                 OR CheckPointStatus IS NULL

方法3。(SQL Server 2008及更高版本)使用COALESCE函数。

SELECT * FROM TAMS.OrderDetail WHERE ISNULL(CheckPointStatus,'') != 'Completed' 

第三个,实际上是你自己的查询,这是正确的

答案 1 :(得分:3)

您的解决方案:

SELECT * FROM TAMS.OrderDetail WHERE coalesce(CheckPointStatus, '') !=  'Completed'

工作正常。另一个更明确,更简单,可能更便宜的解决方案将是

SELECT * FROM TAMS.OrderDetail 
    WHERE CheckPointStatus != 'Completed' OR CheckPointStatus IS NULL

将匹配所有不等于Completed的记录或值为null的记录。