Collation Cast des variables nvarchar en T-sql

j'ai besoin de modifier le classement d'une variable de type nvarchar. documentation:

(...) 3. La clause de collation peut être spécifiée à plusieurs niveaux. Ces éléments comprennent l' suivantes:

Casting du classement d'une expression. Vous pouvez utiliser le COLLATE clause pour appliquer une expression de caractère à une certaine collecte. Caractère constantes et variables sont assignées la compilation par défaut du courant la base de données. Colonne les références sont a assigné la collecte de définition de colonne. Pour le classement d'un l'expression, voir Priorité De Classement (Transact-SQL).

cependant je ne peux pas trouver la syntaxe correcte pour L'usage de CAST(), CONVERT() ou déclaration variable avec DECLARE à cet effet.

24
demandé sur OMG Ponies 2009-10-27 19:12:41

4 réponses

SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS
29
répondu Lukasz Lysik 2009-10-27 16:14:56

CAST ou CONVERT est superflu!

SELECT N'abc' COLLATE French_CS_AS

c'est superflu parce que changer la collation ne change pas le type de données NVARCHAR.

16
répondu nalply 2012-11-10 11:57:08

si vous changez entre 2 et 1 byte, ou vice-ver-sa, les codages de caractères alors CAST ou Convert est nécessaire. Elle n'est pas superflue dans ces cas.

lorsque la colonne source est une séquence de caractères de 2 octets (nchar, nvarchar) et que la projection de sélection doit être un caractère d'un seul octet (char, varchar), vous devez spécifier le cast et convert. Appliquer la conversion de collation avant la coulée entre les systèmes de type.

SELECT CAST(N'ФBC' COLLATE SQL_Latin1_General_CP1_CI_AS as varchar(10)) AS ProjectedSingleByte
4
répondu Robert Livermore 2012-05-29 15:00:06

si vous souhaitez comparer ou joindre deux colonnes de collation différente, cela pourrait vous aider. Dans mon cas, j'ai dû comparer deux colonnes avec L'Une utilisant "SQL_Latin1_General_CP1_CI_AS" et l'autre utilisant "Latin1_General_CP1_CI_AS".

j'ai simplement utilisé cette option où je rejoins ces deux.

on A. Person = B. NAME collate database_default

0
répondu Xavier_prash 2018-09-04 09:03:16