Приведение сопоставления переменных nvarchar в t-sql - PullRequest
27 голосов
/ 27 октября 2009

Мне нужно изменить параметры сортировки переменной nvarchar. По документации :

(...) 3. Может быть указано предложение COLLATE на нескольких уровнях. К ним относятся следующее:

Приведение сопоставления выражение. Вы можете использовать COLLATE предложение применить символьное выражение до определенного сопоставления. символ литералы и переменные назначены сортировка по умолчанию для текущего база данных. Ссылки на столбцы присвоено определение сопоставления колонка. Для сопоставления выражение см. приоритет сортировки (Transact-SQL).

Однако я не могу определить правильный синтаксис для использования CAST (), CONVERT () или объявления переменной с DECLARE для этой цели.

Ответы [ 4 ]

32 голосов
/ 27 октября 2009
SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS
16 голосов
/ 24 февраля 2012

CAST или CONVERT лишнее!

SELECT N'abc' COLLATE French_CS_AS

Это излишне, потому что просто изменение параметров сортировки не меняет тип данных NVARCHAR.

4 голосов
/ 29 мая 2012

Если вы меняете от 2 до 1 байта или наоборот, кодировки символов, тогда CAST или Convert необходимы. В этих случаях это не лишнее.

Если исходный столбец представляет собой 2-байтовую последовательность символов (nchar, nvarchar), а проекция выбора должна быть однобайтовой (char, varchar), необходимо указать приведение и преобразование. Примените преобразование сопоставления перед преобразованием между системами типов.

SELECT CAST(N'ФBC' COLLATE SQL_Latin1_General_CP1_CI_AS as varchar(10)) AS ProjectedSingleByte
1 голос
/ 04 сентября 2018

Если вы хотите сравнить или объединить два столбца с разным сопоставлением, это может помочь. В моем случае мне пришлось сравнить два столбца с одним с использованием «SQL_Latin1_General_CP1_CI_AS», а другой с использованием «Latin1_General_CP1_CI_AS».

Я просто использовал эту опцию, когда присоединяюсь к этим двум.

в A.Person = B.NAME collate database_default

...