目前我在sql server中运行以下查询。如何过滤checkpointstatus
不是'已完成',包括null
值。但问题是我无法获得值为null的记录。
SELECT * FROM TAMS.OrderDetail WHERE CheckPointStatus != 'Completed'
我试图解决这个问题:
SELECT * FROM TAMS.OrderDetail WHERE coalesce(CheckPointStatus, '') != 'Completed'
但只是想确定这是正确的方法吗?
答案 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的记录。