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

私はあなたの「OR」を取り出して、あなたが望むように、どちらか一方ではなく、すべての基準を求めます。

于 2013-02-05T16:44:36.047 に答える
0

他のすべての回答は明示的に除外することに集中しているようですが、それは特別なケースであり、何も真実ではないことNULLを指摘したいと思います。これにより、クエリが単純化されます。NULLNULL NOT IN

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

これにより、X がNULL、「2」、「5」、「8」、または空の文字列ではないすべての行が選択されます。

include が必要な場合NULL 、代わりにやや特殊な構成を行う必要があります。

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

でテストする SQLfiddle

于 2013-02-05T17:45:36.833 に答える