varchar
s und Gleichheit sind in TSQL heikel. Die LEN
Funktion sagt:
Gibt die Anzahl der Zeichen anstelle der Anzahl der Bytes des angegebenen Zeichenfolgenausdrucks zurück, ohne nachgestellte Leerzeichen .
Sie müssen DATALENGTH
verwenden um ein echtes byte
zu erhalten Anzahl der betreffenden Daten. Wenn Sie Unicode-Daten haben, beachten Sie, dass der Wert, den Sie in dieser Situation erhalten, nicht der Länge des Textes entspricht.
print(DATALENGTH(' ')) --1
print(LEN(' ')) --0
Wenn es um die Gleichheit von Ausdrücken geht, werden die beiden Zeichenfolgen wie folgt auf Gleichheit verglichen:
- Kürzere Zeichenfolge erhalten
- Auffüllen mit Leerzeichen bis die Länge der längeren Zeichenfolge entspricht
- Vergleichen Sie die beiden
Es ist der mittlere Schritt, der zu unerwarteten Ergebnissen führt – nach diesem Schritt vergleicht man effektiv Leerzeichen mit Leerzeichen – daher werden sie als gleich angesehen.
LIKE
verhält sich besser als =
in der "Leerzeichen"-Situation, weil es kein Leerzeichen auf dem Muster ausführt, das Sie zu finden versuchten:
if '' = ' '
print 'eq'
else
print 'ne'
Wird eq
geben während:
if '' LIKE ' '
print 'eq'
else
print 'ne'
Wird ne
geben
Vorsicht mit LIKE
obwohl:es ist nicht symmetrisch:Es behandelt nachgestellte Leerzeichen als signifikant im Muster (RHS), aber nicht im Übereinstimmungsausdruck (LHS). Folgendes ist hier entnommen:
declare @Space nvarchar(10)
declare @Space2 nvarchar(10)
set @Space = ''
set @Space2 = ' '
if @Space like @Space2
print '@Space Like @Space2'
else
print '@Space Not Like @Space2'
if @Space2 like @Space
print '@Space2 Like @Space'
else
print '@Space2 Not Like @Space'
@Space Not Like @Space2
@Space2 Like @Space