【问题标题】:Cast collation of nvarchar variables in t-sql在 t-sql 中转换 nvarchar 变量的排序规则
【发布时间】:2010-12-10 13:21:21
【问题描述】:

我需要更改 nvarchar 变量的排序规则。 By documentation:

(...) 3.可以指定COLLATE子句 在几个层面。这些包括 以下:

铸造一个排序规则 表达。您可以使用整理 应用字符表达式的子句 到一定的排序。特点 分配文字和变量 当前的默认排序规则 数据库。列引用是 分配了定义排序规则 列。对于一个整理 表达式,见Collation Precedence (Transact-SQL)。

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

【问题讨论】:

    标签: sql tsql sql-server-2008 collation string-comparison


    【解决方案1】:
    SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS
    
    【解决方案2】:

    CASTCONVERT 是多余的!

    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 collat​​e database_default

      【讨论】:

        猜你喜欢
        • 2019-10-24
        • 2017-05-07
        • 2011-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-04
        • 1970-01-01
        相关资源
        最近更新 更多