我需要更改nvarchar变量的排序规则。 By documentation:
(...)3。可以在多个级别指定COLLATE子句。这些包括以下内容:
转换表达式的排序规则。您可以使用COLLATE子句将字符表达式应用于某个排序规则。为字符文字和变量分配当前数据库的默认排序规则。为列引用分配列的定义排序规则。有关表达式的排序规则,请参阅Collation Precedence(Transact-SQL)。
但是,为了这个目的,我无法弄清楚使用CAST(),CONVERT()或使用DECLARE的变量声明的正确语法。
SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS
CAST
或CONVERT
是多余的!
SELECT N'abc' COLLATE French_CS_AS
这是多余的,因为只更改排序规则不会更改数据类型NVARCHAR
。
如果要在2到1个字节之间进行更改,或者在ver-sa-sa字符编码之间进行更改,则需要进行CAST或转换。在这些情况下,这不是多余的。
当源列是2字节字符序列(nchar,nvarchar)并且选择投影需要是单字节字符(char,varchar)时,应指定强制转换和转换。在类型系统之间的转换之前应用归类转换。
SELECT CAST(N'ФBC' COLLATE SQL_Latin1_General_CP1_CI_AS as varchar(10)) AS ProjectedSingleByte
如果您想比较或加入两列不同的排序规则,这可能有所帮助。在我的情况下,我必须比较两个列,一个使用'SQL_Latin1_General_CP1_CI_AS',另一个使用'Latin1_General_CP1_CI_AS'。
我只是使用这个选项加入这两个。
在A.Person = B.NAME collate database_default