【问题标题】:Replace of NCHAR(1600) is not working on SQL Server替换 NCHAR(1600) 在 SQL Server 上不起作用
【发布时间】:2020-06-13 17:48:24
【问题描述】:

当我运行下面的代码时,NCHAR(1600) 不会被替换

SELECT REPLACE(N'foo' + NCHAR(1600), NCHAR(1600), '**') --> output: fooـ
  • 我的数据库排序规则是Persian_100_CI_AI
  • SQL server 的默认排序规则也是Persian_100_CI_AI
  • 我的SQL服务器版本是Microsoft SQL Server 2017 (RTM-CU3-GDR) (KB4052987) - 14.0.3015.40 (X64)

有谁知道问题出在哪里?

【问题讨论】:

    标签: sql-server tsql sql-server-2017 sql-server-collation


    【解决方案1】:

    某些字符在某些排序规则中没有很好地匹配。因此,有些人会在他们不一样时与其他人进行匹配,而有些人可能最终不会被匹配,即使他们是。

    REPLACE 使用排序规则,因此看起来相同字符的匹配不起作用。在这种情况下,通常建议在 REPLACE 内部使用不同的排序规则,如果您需要返回原始排序规则,请在外部再次使用 COLLATE

    SELECT REPLACE(N'foo' + NCHAR(1600) COLLATE Persian_100_BIN, NCHAR(1600), '**') COLLATE Persian_100_CI_AI;
    

    【讨论】:

    【解决方案2】:

    我们也可以使用REPLICATE,而不是在高层写排序规则,只需要在N'foo'值之后连接*对吗?

    SELECT CONCAT(N'foo',REPLICATE('*',1600))
    

    【讨论】:

      猜你喜欢
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 2017-02-09
      • 2022-06-10
      • 1970-01-01
      • 2023-04-04
      • 2013-02-24
      • 1970-01-01
      相关资源
      最近更新 更多