0

我想编写一个查询,返回 X 列中的所有非空单元格,其值不是 2、5 或 8。我这样做对吗?因为我的结果肯定看起来不对。

SELECT *
FROM [Example].[dbo].[table]
WHERE X <> '' AND (X <> '2' OR X <> '5' OR X <> '8');  
4

5 回答 5

4

空,你的意思是NULL什么都没有)并且empty string 不等于所以null你应该使用特殊条件来过滤掉非NULL值使用IS NOT NULL

WHERE X IS NOT NULL AND 
      X NOT IN('', '2', '5', '8'); 
于 2013-02-05T16:44:04.167 回答
2
SELECT *
FROM [Example].[dbo].[table]
WHERE X <> '' AND  X IS NOT NULL AND X NOT IN ('2','5','8')
于 2013-02-05T16:43:46.520 回答
2

就个人而言,我会这样写:

SELECT *
FROM [Example].[dbo].[table]
WHERE ISNULL(X,'') <> ''
AND X not in ('2','5','8'); 
于 2013-02-05T16:43:55.370 回答
1

您没有在此查询中考虑 NULLS。

X IS NOT NULL

我会拿出你的“或”,然后按照你想要的所有这些标准而不是一个或另一个。

于 2013-02-05T16:44:36.047 回答
0

似乎所有其他答案都集中在NULL明确过滤,但我想我会指出这NULL是一种特殊情况,NULL NOT IN任何事情都不是真的。这会将您的查询简化为;

SELECT * FROM myTable WHERE X NOT IN ('', '2','5','8')

这将选择 X 不是NULL'2'、'5'、'8' 或空字符串的所有行。

如果你想NULL 被包含,你必须做一些奇怪的构造;

SELECT * FROM myTable WHERE X IS NULL OR X NOT IN ('', '2', '5', '8');

一个用于测试的 SQLfiddle

于 2013-02-05T17:45:36.833 回答