380 Stimmen

Nicht gleich <> != Operator auf NULL

Könnte jemand bitte das folgende Verhalten in SQL erklären?

SELECT * FROM MyTable WHERE MyColumn != NULL (0 Results)
SELECT * FROM MyTable WHERE MyColumn <> NULL (0 Results)
SELECT * FROM MyTable WHERE MyColumn IS NOT NULL (568 Results)

420voto

OMG Ponies Punkte 312816

<> ist der Standard SQL-92; != ist sein Äquivalent. Beide werten für Werte aus, die NULL ist nicht NULL ist ein Platzhalter für das Fehlen eines Wertes.

Aus diesem Grund können Sie nur IS NULL / IS NOT NULL als Prädikate für solche Situationen.

Dieses Verhalten ist nicht spezifisch für SQL Server. Alle standardkonformen SQL-Dialekte funktionieren auf die gleiche Weise.

備考 : Zum Vergleich, ob Ihr Wert ist nicht null verwenden Sie IS NOT NULL , während zum Vergleich mit nicht null Wert, verwenden Sie <> 'YOUR_VALUE' . Ich kann nicht sagen, ob mein Wert gleich oder nicht gleich NULL ist, aber ich kann sagen, ob mein Wert NULL oder NICHT NULL ist. Ich kann vergleichen, ob mein Wert etwas anderes als NULL ist.

128voto

Barry Brown Punkte 19577

NULL hat keinen Wert und kann daher nicht mit den Einzelwertoperatoren verglichen werden.

Mit anderen Worten, kein Wert kann jemals gleich (oder ungleich) NULL sein, weil NULL keinen Wert hat.

Daher hat SQL spezielle IS NULL und IS NOT NULL Prädikate für den Umgang mit NULL.

30voto

Cade Roux Punkte 85601

Beachten Sie, dass dieses Verhalten dem Standardverhalten (ANSI) entspricht.

Wenn Sie:

 SET ANSI_NULLS OFF

http://msdn.microsoft.com/en-us/library/ms188048.aspx

Sie werden unterschiedliche Ergebnisse erhalten.

SET ANSI_NULLS OFF wird es in Zukunft offenbar nicht mehr geben...

13voto

Jeff Mergler Punkte 1144

Wir verwenden

SELECT * FROM MyTable WHERE ISNULL(MyColumn, ' ') = ' ';

um alle Zeilen zurückzugeben, in denen MyColumn NULL ist, oder alle Zeilen, in denen MyColumn eine leere Zeichenfolge ist. Für viele "Endbenutzer" ist die Frage NULL vs. leere Zeichenfolge eine Unterscheidung ohne Notwendigkeit und ein Punkt der Verwirrung.

11voto

Mahendra Liya Punkte 11992

In SQL wird alles, was Sie auswerten/berechnen, mit NULL resultiert in UNKNOWN

Das ist der Grund SELECT * FROM MyTable WHERE MyColumn != NULL o SELECT * FROM MyTable WHERE MyColumn <> NULL liefert 0 Ergebnisse.

Einen Scheck ausstellen für NULL Werte, wird die Funktion isNull bereitgestellt.

Außerdem können Sie die IS Operator, den Sie in der dritten Abfrage verwendet haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X