Assemblage des variables nvarchar dans t-sql
-
06-07-2019 - |
Question
Je dois changer le classement d'une variable nvarchar. Par la documentation :
(...) 3. La clause COLLATE peut être spécifiée à plusieurs niveaux. Ceux-ci incluent le suivant:
Lancer la collation d'un expression. Vous pouvez utiliser le COLLATE clause d'application d'une expression de caractère à une certaine collation. Personnage les littéraux et les variables sont attribués le classement par défaut du courant base de données. Les références de colonne sont assigné la définition collation de la colonne. Pour la collation d'un expression, voir Précédente de classement (Transact-SQL).
Cependant, je ne peux pas trouver la syntaxe correcte pour l'utilisation de CAST (), CONVERT () ou d'une déclaration de variable avec DECLARE à cette fin.
La solution
SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS
Autres conseils
CAST
ou CONVERT
est superflu!
SELECT N'abc' COLLATE French_CS_AS
Cela est superflu car le simple changement de classement ne modifie pas le type de données NVARCHAR
.
Si vous passez de 2 à 1 octet, ou vice-versa, des codages de caractères, puis CAST ou Convert est nécessaire. Ce n'est pas superflu dans ces cas.
Lorsque la colonne source est une séquence de caractères sur 2 octets (nchar, nvarchar) et que la projection de sélection doit être un caractère sur un seul octet (char, varchar), vous devez spécifier la conversion et la conversion. Appliquez la conversion de classement avant la conversion entre les systèmes de types.
SELECT CAST(N'ФBC' COLLATE SQL_Latin1_General_CP1_CI_AS as varchar(10)) AS ProjectedSingleByte
Si vous souhaitez comparer ou joindre deux colonnes de classements différents, cela peut aider. Dans mon cas, je devais comparer deux colonnes, l'une utilisant 'SQL_Latin1_General_CP1_CI_AS' et l'autre utilisant 'Latin1_General_CP1_CI_AS'.
J'ai simplement utilisé cette option pour rejoindre ces deux personnes.
sur A.Person = B.NAME collate database_default