Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Le colonne char e nchar di SQL Server eseguono ricerche in modo diverso

Dalla documentazione per LIKE (Transact-SQL) :

Ho riprodotto il tuo problema con la seguente tabella:

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

Risultato:

(0 row(s) affected)

Tuttavia, se usi NVARCHAR invece, questo problema non si verifica:

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

Risultati:

x
-----
nanaS

Tuttavia la tabella originale non ha prodotto i risultati desiderati anche se la conversione in NVARCHAR nel WHERE clausola:

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

Risultato:

(0 row(s) affected)

Quindi una potenziale soluzione alternativa sarebbe quella di utilizzare in primo luogo il tipo di dati corretto (e anche sempre anteporre stringhe Unicode N'properly' . Se non riesci a correggere il tipo di dati, puoi utilizzare RTRIM() soluzione alternativa pubblicata da Aushin, ma tieni a mente anche i commenti di HLGEM.