<>的问题同时比较SQL Server 2005中的空值

时间:2011-05-05 10:24:26

标签: sql-server-2005

我有四列名称Level1, Level2, Level3,默认为空值,我想检索所有没有Level1, Level 2, Level 3完成的行。

这是我的查询但不提取任何值。请帮帮我

select name from table
where Level1 <>'Completed' and Level2 <> 'Completed and Level3 <> 'Completed'

select name from table
where Level1 <>'Completed' or Level2 <> 'Completed or Level3 <> 'Completed' .

但它没有获取任何行。 <>运算符或NULL值是否存在问题?

3 个答案:

答案 0 :(得分:3)

对于空值,您应使用value is not nullvalue is null

答案 1 :(得分:1)

由于您需要单独处理NULL“非值”,请尝试以下方法:

SELECT name 
FROM dbo.table
WHERE ISNULL(Level1, 'null') <> 'Completed' 
  AND ISNULL(Level2, 'null') <> 'Completed'
  AND ISNULL(Level3, 'null') <> 'Completed'

如果其中一列是NULL,那么NULL将被替换为您传递给ISNULL()的第二个句子的任何值 - 并且因为我正在替换{ {1}}使用'null'字符串 - 它不等于NULL并将被选中。

答案 2 :(得分:0)

具有NULL的列意味着列值未知或不可用。 NULL不等于0或零长度字符串。

要根据NULL值过滤行,您必须使用IS NULLIS NOT NULL

要查找任何一列为NULL的行,您可以使用以下查询:

Select *
From YourTable
Where Level1 Is Null Or Level2 Is Null Or Level3 Is Null

在MS SQL Server中查看此MSDN Article for a full explanation of NULL Comparisions