我想编写一个查询,返回 X 列中的所有非空单元格,其值不是 2、5 或 8。我这样做对吗?因为我的结果肯定看起来不对。
SELECT *
FROM [Example].[dbo].[table]
WHERE X <> '' AND (X <> '2' OR X <> '5' OR X <> '8');
我想编写一个查询,返回 X 列中的所有非空单元格,其值不是 2、5 或 8。我这样做对吗?因为我的结果肯定看起来不对。
SELECT *
FROM [Example].[dbo].[table]
WHERE X <> '' AND (X <> '2' OR X <> '5' OR X <> '8');
空,你的意思是NULL
(什么都没有)并且empty string
不等于所以null
你应该使用特殊条件来过滤掉非NULL
值使用IS NOT NULL
WHERE X IS NOT NULL AND
X NOT IN('', '2', '5', '8');
SELECT *
FROM [Example].[dbo].[table]
WHERE X <> '' AND X IS NOT NULL AND X NOT IN ('2','5','8')
就个人而言,我会这样写:
SELECT *
FROM [Example].[dbo].[table]
WHERE ISNULL(X,'') <> ''
AND X not in ('2','5','8');
您没有在此查询中考虑 NULLS。
X IS NOT NULL
我会拿出你的“或”,然后按照你想要的所有这些标准而不是一个或另一个。
似乎所有其他答案都集中在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');