34

我需要更改 nvarchar 变量的排序规则。通过文档

(...) 3. 可以在多个级别指定 COLLATE 子句。其中包括:

转换表达式的排序规则。您可以使用 COLLATE 子句将字符表达式应用于某个排序规则。字符文字和变量被分配了当前数据库的默认排序规则。列引用被分配列的定义排序规则。有关表达式的排序规则,请参阅排序规则优先级 (Transact-SQL)。

但是,我无法找出使用 CAST()、CONVERT() 或带有 DECLARE 的变量声明用于此目的的正确语法。

4

4 回答 4

43
SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS
于 2009-10-27T16:14:56.327 回答
20

CAST或者CONVERT是多余的!

SELECT N'abc' COLLATE French_CS_AS

这是多余的,因为仅更改排序规则不会更改数据类型NVARCHAR

于 2012-02-24T10:05:26.713 回答
5

如果您在 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
于 2012-05-29T14:55:10.527 回答
1

如果您想比较或加入不同排序规则的两列,这可能会有所帮助。在我的情况下,我必须比较两列,一列使用“SQL_Latin1_General_CP1_CI_AS”,另一列使用“Latin1_General_CP1_CI_AS”。

我只是在加入这两个的地方使用了这个选项。

on A.Person = B.NAME collate database_default

于 2018-09-04T09:03:16.260 回答