Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

char- und nchar-Spalten von SQL Server suchen unterschiedlich

Aus der Dokumentation für LIKE (Transact-SQL) :

Ich habe Ihr Problem mit der folgenden Tabelle reproduziert:

DECLARE @t TABLE(x NCHAR(25));
INSERT @t SELECT N'nanaS';
SELECT x FROM @t WHERE x LIKE N'%S';

Ergebnis:

(0 row(s) affected)

Wenn Sie jedoch NVARCHAR verwenden stattdessen tritt dieses Problem nicht auf:

DECLARE @t TABLE(x NVARCHAR(25));
INSERT @t SELECT N'nanaS';
SELECT x FROM @t WHERE x LIKE N'%S';

Ergebnisse:

x
-----
nanaS

Die ursprüngliche Tabelle lieferte jedoch nicht die gewünschten Ergebnisse, selbst wenn sie in NVARCHAR konvertiert wurde im WHERE Klausel:

DECLARE @t TABLE(x NCHAR(25));
INSERT @t SELECT N'nanaS';
SELECT x FROM @t WHERE CONVERT(NVARCHAR(25),x) LIKE N'%S';

Ergebnis:

(0 row(s) affected)

Eine mögliche Problemumgehung wäre also, überhaupt den richtigen Datentyp zu verwenden (und Unicode-Strings auch immer N'properly' voranzustellen . Wenn Sie den Datentyp nicht korrekt machen können, können Sie RTRIM() verwenden von Aushin gepostete Problemumgehung, aber denken Sie auch an die Kommentare von HLGEM.