2011-05-05 33 views
0

我有四个列名,Level1, Level2, Level3和默认为空值,我想检索所有没有Level1, Level 2, Level 3的行完成。问题用<>同时比较SQL Server 2005中的空值

这是我的我的查询,但它没有获取任何值。请帮我

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值有问题吗?

+0

'NULL'不是一个值 - 它是值**的**缺失**。因此,您**不能**使用常规比较运算符 - 包含NULL的列的'=,<>,> =,<='也总是为NULL(既不是'true'也不''' ) – 2011-05-05 10:55:26

回答

3

NULL值,你应该使用value is not nullvalue is null

+0

从表中选择名称,其中Level1 <>'Completed'且为null或Level2 <>'已完成且为null或Level3 <>'已完成'且为空。你是否认为我的查询是这样的 – chaitanya 2011-05-05 10:34:36

+0

我的问题是,如果所有三个列是level1,level2,level3的值为'Completed',我不想获取该记录。我只是想过滤该记录。如果任何一个级别为“已完成”,则其他两个级别都为空,或者两个级别中的任何一个完成,其他1为空。我也想取得他们的记录。 – chaitanya 2011-05-05 10:42:14

+0

请帮我解决这个问题 – chaitanya 2011-05-05 10:47:05

0

用NULL列表示该列值未知或不可用。 NULL不等于0或零长度的字符串。

为了过滤行基础上,你必须使用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

1

由于您需要分别对待NULL“非值”,请尝试如下所示:

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

如果一列是NULL,那么NULL将与您在作为第二arugment传递给ISNULL()任何值来代替 - 而且因为我更换与“空”字符串NULL - 这不是等于'Completed'并且将被选中。

+0

例如:名称level1 level2 level3 – chaitanya 2011-05-05 11:20:09

+0

感谢马克...当我编辑我的查询这样的工作........ SELECT name FROM dbo.table WHERE ISNULL(Level1,'null')<>'Completed' OR ISNULL(Level2,'null')<>'Completed'或ISNULL(Level3,'null')<>'Completed' – chaitanya 2011-05-05 12:27:58