sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server char och nchar kolumner söker olika

Från dokumentationen för LIKE (Transact-SQL) :

Jag återskapade ditt problem med följande tabell:

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

Resultat:

(0 row(s) affected)

Men om du använder NVARCHAR istället uppstår inte det här problemet:

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

Resultat:

x
-----
nanaS

Den ursprungliga tabellen gav dock inte de önskade resultaten även om man konverterade till NVARCHAR i WHERE klausul:

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

Resultat:

(0 row(s) affected)

Så en möjlig lösning skulle vara att använda rätt datatyp i första hand (och även alltid prefixa Unicode-strängar N'properly' . Om du inte kan göra datatypen korrekt kan du använda RTRIM() lösningen postad av Aushin, men håll HLGEMs kommentarer i åtanke också.



  1. Få databasschema med en fråga?

  2. Ansluter till MySQL från R

  3. Importera flera .sql-dumpfiler till mysql-databasen från skalet

  4. COLLATION() Funktion i Oracle