如何过滤包含空值和其他状态的记录

use*_*181 0 sql sql-server

目前我正在 sql server 中运行以下查询。如何过滤谁checkpointstatus不是“已完成”(包括null值)。但问题是我无法获取那些值为空的记录。

  SELECT * FROM TAMS.OrderDetail WHERE CheckPointStatus != 'Completed'
Run Code Online (Sandbox Code Playgroud)

我尝试通过以下方式解决此问题:

  SELECT * FROM TAMS.OrderDetail WHERE coalesce(CheckPointStatus, '') !=  'Completed'
Run Code Online (Sandbox Code Playgroud)

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

Vah*_*ian 5

尝试以下方法之一:

方法一。

SELECT * FROM TAMS.OrderDetail WHERE CheckPointStatus != 'Completed' 
                                 OR CheckPointStatus IS NULL
Run Code Online (Sandbox Code Playgroud)

方法2.(SQL Server 2008及以上版本)使用ISNULL函数。

SELECT * FROM TAMS.OrderDetail WHERE ISNULL(CheckPointStatus,'') != 'Completed' 
Run Code Online (Sandbox Code Playgroud)

方法3.(SQL Server 2008及以上版本)使用COALESCE函数。

SELECT * FROM TAMS.OrderDetail WHERE COALESCE(CheckPointStatus, '') !=  'Completed'
Run Code Online (Sandbox Code Playgroud)

第三个,其实是你自己查询的,是正确的