Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

As colunas char e nchar do SQL Server pesquisam de forma diferente


Da documentação para LIKE (Transact-SQL) :

Reproduzi seu problema com a seguinte tabela:
DECLARE @t TABLE(x NCHAR(25));
INSERT @t SELECT N'nanaS';
SELECT x FROM @t WHERE x LIKE N'%S';

Resultado:
(0 row(s) affected)

No entanto, se você usar NVARCHAR em vez disso, esse problema não ocorre:
DECLARE @t TABLE(x NVARCHAR(25));
INSERT @t SELECT N'nanaS';
SELECT x FROM @t WHERE x LIKE N'%S';

Resultados:
x
-----
nanaS

No entanto, a tabela original não produziu os resultados desejados, mesmo convertendo para NVARCHAR no WHERE cláusula:
DECLARE @t TABLE(x NCHAR(25));
INSERT @t SELECT N'nanaS';
SELECT x FROM @t WHERE CONVERT(NVARCHAR(25),x) LIKE N'%S';

Resultado:
(0 row(s) affected)

Portanto, uma possível solução alternativa seria usar o tipo de dados correto em primeiro lugar (e também sempre prefixar as strings Unicode N'properly' . Se você não conseguir corrigir o tipo de dados, você pode usar o RTRIM() solução postada por Auchin, mas lembre-se também dos comentários do HLGEM.