sql >> Base de Datos >  >> RDS >> Sqlserver

Las columnas char y nchar de SQL Server buscan de manera diferente

De la documentación de LIKE (Transact-SQL) :

Reproduje tu problema con la siguiente tabla:

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)

Sin embargo, si usa NVARCHAR en cambio, este problema no ocurre:

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

Resultados:

x
-----
nanaS

Sin embargo, la tabla original no produjo los resultados deseados incluso si se convirtió a NVARCHAR en el 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)

Entonces, una posible solución alternativa sería usar el tipo de datos correcto en primer lugar (y también siempre prefijar cadenas Unicode N'properly' . Si no puede hacer que el tipo de datos sea correcto, puede usar RTRIM() solución alternativa publicada por Aushin, pero también tenga en cuenta los comentarios de HLGEM.