我想编写一个查询,返回X列中所有非空单元格,其值不是2,5或8。我这样做了吗?因为我的结果肯定是错误的。
SELECT *
FROM [Example].[dbo].[table]
WHERE X <> '' AND (X <> '2' OR X <> '5' OR X <> '8');
答案 0 :(得分:4)
为空,你的意思是NULL
(没有)和empty string
不等于到null
所以你应该使用特殊的使用NULL
IS NOT NULL
值的条件
WHERE X IS NOT NULL AND
X NOT IN('', '2', '5', '8');
答案 1 :(得分:2)
SELECT *
FROM [Example].[dbo].[table]
WHERE X <> '' AND X IS NOT NULL AND X NOT IN ('2','5','8')
答案 2 :(得分:2)
就个人而言,我会将其写成:
SELECT *
FROM [Example].[dbo].[table]
WHERE ISNULL(X,'') <> ''
AND X not in ('2','5','8');
答案 3 :(得分:1)
您在此查询中未考虑NULLS。
X IS NOT NULL
我会把你的&#39;&#39;&#39;并且只是做,并且你想要所有那些标准而不是一个或另一个。
答案 4 :(得分: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');