我需要更改 nvarchar 变量的排序规则。通过文档:
(...) 3. 可以在多个级别指定 COLLATE 子句。其中包括:
转换表达式的排序规则。您可以使用 COLLATE 子句将字符表达式应用于某个排序规则。字符文字和变量被分配了当前数据库的默认排序规则。列引用被分配列的定义排序规则。有关表达式的排序规则,请参阅排序规则优先级 (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 字节之间进行更改,或者反之亦然,那么字符编码则需要 CAST 或 Convert。在这些情况下,这不是多余的。
当源列是 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”。
我只是在加入这两个的地方使用了这个选项。
on A.Person = B.NAME collate database_default