在 t-sql 中转换 nvarchar 变量的排序规则
Posted
技术标签:
【中文标题】在 t-sql 中转换 nvarchar 变量的排序规则【英文标题】:Cast collation of nvarchar variables in t-sql 【发布时间】:2010-12-10 13:21:21 【问题描述】:我需要更改 nvarchar 变量的排序规则。 By documentation:
(...) 3.可以指定COLLATE子句 在几个层面。这些包括 以下:
铸造一个排序规则 表达。您可以使用整理 应用字符表达式的子句 到一定的排序。特点 分配文字和变量 当前的默认排序规则 数据库。列引用是 分配了定义排序规则 列。对于一个整理 表达式,见Collation Precedence (Transact-SQL)。
但是,我无法确定使用 CAST()、CONVERT() 或带有 DECLARE 的变量声明的正确语法。
【问题讨论】:
【参考方案1】:SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS
【讨论】:
这来自这里:msdn.microsoft.com/en-us/library/aa226054%28SQL.80%29.aspx【参考方案2】:CAST
或CONVERT
是多余的!
SELECT N'abc' COLLATE French_CS_AS
这是多余的,因为仅更改排序规则不会更改数据类型NVARCHAR
。
【讨论】:
在这里尝试将 NVARCHAR 转换为指定排序规则的 VARCHAR。 (请注意,可以存储在 VARCHAR 中的实际字符因排序规则而异。) @Joshua 也许这是个错误的问题,因为它与 VARCHAR 无关。【参考方案3】:如果您在 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
【讨论】:
【参考方案4】:如果您想比较或加入不同排序规则的两列,这可能会有所帮助。 在我的情况下,我必须比较两列,一列使用“SQL_Latin1_General_CP1_CI_AS”,另一列使用“Latin1_General_CP1_CI_AS”。
我只是在加入这两个时使用了这个选项。
关于 A.Person = B.NAME collate database_default
【讨论】:
以上是关于在 t-sql 中转换 nvarchar 变量的排序规则的主要内容,如果未能解决你的问题,请参考以下文章
在 T-SQL 中将 '01-Sep-2017' 转换为 '01/09/2017'?
特定列 -- 将数据类型 nvarchar 转换为 bigint 时出错