896 Stimmen

Sollte ich != oder <> für nicht gleich in T-SQL verwenden?

Ich habe gesehen SQL die sowohl != y <> para nicht gleich . Was ist die bevorzugte Syntax und warum?

Ich mag != denn <> Erinnert mich an Visual Basic .

7 Stimmen

1 Stimmen

Übertragbarkeit des Codes. Wenn Ihre Anforderungen durch ANSI-SQL leicht erfüllt werden können, ist es besser, es zu verwenden. Sie können denselben Code in allen DBs verwenden. Z.B. ein SQL-Buchautor, der die Grundlagen von SQL anhand von Beispielcode veranschaulichen möchte.

2 Stimmen

Ich möchte ein Beispiel hinzufügen, bei dem nur ANSI-SQL-Code ein Problem sein kann - Standard-SQL unterstützt die Optionen NULLS FIRST und NULLS LAST, um zu steuern, wie NULLs sortiert werden, aber T-SQL unterstützt diese Option nicht.

4voto

jitendrapurohit Punkte 8899

Eine Alternative wäre die Verwendung des NULLIF-Operators anstelle von <> o != die NULL zurückgibt, wenn die beiden Argumente gleich sind NULLIF in Microsoft Docs . Ich glaube also, dass die WHERE-Klausel geändert werden kann für <> y != wie folgt:

NULLIF(arg1, arg2) IS NOT NULL

Ich habe festgestellt, dass die Verwendung von <> y != funktioniert in manchen Fällen nicht für das Datum. Die Verwendung des obigen Ausdrucks ist daher sehr hilfreich.

8 Stimmen

Ich bin nicht sicher, ob diese Funktion genauso gut funktioniert wie <> in Bezug auf die Indexnutzung in allen Eckfällen. Außerdem ist die Lesbarkeit sicherlich viel schlechter...

1 Stimmen

Wie ich in der Antwort erwähnt habe, hat das bei mir mit den Datumsfeldern im Jahr 2014 funktioniert. Ich bin mir nicht sicher, was die Klausel/Bedingung war, die andere Antworten einschränkte, aber wenn ich mir einige der Bewertungen ansehe, scheint dies auch anderen zu helfen.

2 Stimmen

Sie haben wahrscheinlich Daten verglichen, die eine Zeitkomponente hatten. Mit CAST(date1) AS DATE <> CAST(date2) AS DATE ist ein besserer Weg zu gehen IMHO

2voto

Andrea Antonangeli Punkte 1166

Ich benutze lieber != anstelle von <> denn manchmal benutze ich die <s></s> Syntax, um SQL-Befehle zu schreiben. Verwendung von != ist in diesem Fall praktischer, um Syntaxfehler zu vermeiden.

2 Stimmen

Dies ist eine gute Erklärung dafür, dass Sie das eine dem anderen vorziehen.

-8voto

Hamlet Javier Punkte 21

Sie werden beide in T-SQL akzeptiert. Es scheint jedoch, dass die Verwendung von <> funktioniert viel schneller als != . Ich habe gerade eine komplexe Abfrage ausgeführt, die mit != und dauerte im Durchschnitt etwa 16 Sekunden. Ich änderte sie in <> und die Abfrage dauert jetzt im Durchschnitt etwa 4 Sekunden. Das ist eine enorme Verbesserung!

27 Stimmen

Wenn Sie zwei ähnliche Abfragen nacheinander in SQL Server ausführen, hat dieser wahrscheinlich Daten im Speicher zwischengespeichert und für ähnliche Abfragen optimiert. Wenn Sie dies in umgekehrter Reihenfolge tun, könnten Sie das gegenteilige Ergebnis erhalten!

4 Stimmen

Auch das ist falsch, denn sie würden nicht zwei Betreiber haben, die genau gleich funktionieren und von denen einer "einfach so" langsamer ist. Es gibt viele Faktoren, die dazu beitragen, dass ein und dieselbe Abfrage zu unterschiedlichen Ausführungszeiten führt.

4 Stimmen

Schauen Sie sich einfach die Ausführungspläne an, um zu sehen, ob sie sich unterscheiden

-16voto

Kevin Kinchen Punkte 1

Obwohl sie auf die gleiche Weise funktionieren, != bedeutet genau "nicht gleich", während <> bedeutet größer als und kleiner als der gespeicherte Wert.

Erwägen Sie >= o <= und dies wird sinnvoll sein, wenn Sie Ihre Indizes in Abfragen einbeziehen... <> in einigen Fällen schneller laufen (mit dem richtigen Index), in anderen Fällen (ohne Index) jedoch genauso schnell.

Dies hängt auch davon ab, wie Ihr Datenbanksystem die Werte liest != y <> . Der Datenbankanbieter kann es einfach abkürzen und dafür sorgen, dass sie gleich funktionieren, so dass es so oder so keinen Vorteil gibt. PostgreSQL und SQL Server kürzen dies nicht ab; es wird so gelesen, wie es oben steht.

5 Stimmen

Haben Sie irgendwelche Belege für Ihre Aussage? Beide Betreiber scheinen genau dasselbe zu sein PostgreSQL , Oracle et MySQL .

13 Stimmen

Das ist völlig falsch, es mag für Sie wie "größer und kleiner als der gespeicherte Wert" aussehen, wenn Sie diese Zeichen in Ihrem Kopf kombinieren, aber für den Lexer ist es nur eine andere Art, das Token darzustellen.

1 Stimmen

Mangel an entsprechenden Ressourcen!

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