我需要更改nvarchar变量的排序规则。 By documentation:
(...) 3.可以指定COLLATE子句 在几个层面。这些包括 以下内容:
投射整理的 表达。您可以使用COLLATE 应用字符表达式的子句 一定的整理。字符 文字和变量已分配 当前的默认排序规则 数据库。列引用是 分配定义整理 专栏。对于整理 表达式,见Collation Precedence (处理SQL)。
但是为了这个目的,我无法弄清楚使用CAST(),CONVERT()或使用DECLARE的变量声明的正确语法。
答案 0 :(得分:32)
SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS
答案 1 :(得分:16)
CAST
或CONVERT
是多余的!
SELECT N'abc' COLLATE French_CS_AS
这是多余的,因为只更改排序规则不会更改数据类型NVARCHAR
。
答案 2 :(得分:4)
如果要在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
答案 3 :(得分:1)
如果您想比较或合并不同归类的两列,则可能会有所帮助。 就我而言,我不得不将两列进行比较,一列使用“ SQL_Latin1_General_CP1_CI_AS”,另一列使用“ Latin1_General_CP1_CI_AS”。
我只是在我将这两者结合在一起时使用了此选项。
在A.Person = B.NAME上整理database_default