Heim >Datenbank >MySQL-Tutorial >Ignoriert die „WHERE'-Klausel von SQL Server nachfolgende Leerzeichen in String-Vergleichen?

Ignoriert die „WHERE'-Klausel von SQL Server nachfolgende Leerzeichen in String-Vergleichen?

Linda Hamilton
Linda HamiltonOriginal
2025-01-05 01:48:381031Durchsuche

Does SQL Server's `WHERE` Clause Ignore Trailing Spaces in String Comparisons?

SQL WHERE-Klausel: Nachgestellte Leerzeichen beim Wertabgleich

In SQL Server weisen Zeichenfolgenvergleiche mit der WHERE-Klausel ein eigenartiges Verhalten auf, das zu Problemen führen kann zu unerwarteten Ergebnissen. Insbesondere ignoriert der Gleichheitsoperator (=) nachgestellte Leerzeichen, wenn Vergleiche durchgeführt werden.

Stellen Sie sich das folgende Szenario vor:

  • Eine Tabelle namens Zone existiert mit einer Primärschlüsselspalte namens ZoneReference vom Typ varchar (50) mit der NOT NULL-Einschränkung.
  • Eine Abfrage wird ausgeführt, um den QuotedZoneReference-Wert für einen ZoneReference-Wert von auszuwählen 'WF11XU':
select '"' + ZoneReference + '"' as QuotedZoneReference
from Zone
where ZoneReference = 'WF11XU'

Überraschenderweise liefert die Abfrage das folgende Ergebnis:

"WF11XU "

Erklärung:

Dieses Verhalten stammt aus der SQL-92-Spezifikation, die vorschreibt, dass Zeichenfolgen in Vergleichsoperationen mit Leerzeichen aufgefüllt werden sollten, um sicherzustellen, dass sie die gleiche Länge haben vor dem Vergleich. In diesem Fall wird der ZoneReference-Wert in der WHERE-Klausel ('WF11XU') mit einem nachgestellten Leerzeichen aufgefüllt, was zu einer Übereinstimmung mit dem Wert in der Tabelle führt.

Auswirkungen:

Diese Auffüllung kann zu Problemen führen, wenn versucht wird, exakte Werte abzugleichen, die möglicherweise nachgestellte Leerzeichen enthalten. Wenn der beabsichtigte ZoneReference-Wert beispielsweise tatsächlich „WF11XU“ ohne das nachgestellte Leerzeichen wäre, würde die Abfrage keine Ergebnisse zurückgeben.

Lösungen:

Um genaue Übereinstimmungen sicherzustellen, Ziehen Sie die folgenden Lösungen in Betracht:

  • Verwenden Sie die TRIM()-Funktion, um nachgestellte Leerzeichen sowohl aus dem WHERE-Klauselwert als auch aus der Tabelle zu entfernen Spaltenwert.
  • Konvertieren Sie die Zeichenfolgen explizit in einen Datentyp, der keine nachgestellten Leerzeichen zulässt, z. B. nvarchar(50).
  • Passen Sie die SQL Server-Sortierungseinstellungen so an, dass die Groß- und Kleinschreibung berücksichtigt wird Leerzeichensensitiv, wodurch verhindert wird, dass nachfolgende Leerzeichen ignoriert werden.

Das obige ist der detaillierte Inhalt vonIgnoriert die „WHERE'-Klausel von SQL Server nachfolgende Leerzeichen in String-Vergleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn