Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Les colonnes char et nchar de SQL Server recherchent différemment

À partir de la documentation de LIKE (Transact-SQL) :

J'ai reproduit votre problème avec le tableau suivant :

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

Résultat :

(0 row(s) affected)

Cependant, si vous utilisez NVARCHAR à la place, ce problème ne se produit pas :

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

Résultats :

x
-----
nanaS

Cependant, la table d'origine n'a pas produit les résultats souhaités même lors de la conversion en NVARCHAR dans le WHERE clause :

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

Résultat :

(0 row(s) affected)

Ainsi, une solution de contournement potentielle serait d'utiliser le bon type de données en premier lieu (et également de toujours préfixer les chaînes Unicode N'properly' . Si vous ne pouvez pas corriger le type de données, vous pouvez utiliser le RTRIM() solution de contournement publiée par Aushin, mais gardez également à l'esprit les commentaires de HLGEM.