1

当我运行下面的代码时,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)

有谁知道是什么问题?

4

2 回答 2

5

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

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

SELECT REPLACE(N'foo' + NCHAR(1600) COLLATE Persian_100_BIN, NCHAR(1600), '**') COLLATE Persian_100_CI_AI;
于 2020-06-13T18:14:31.723 回答
-1

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

SELECT CONCAT(N'foo',REPLICATE('*',1600))
于 2020-07-08T08:46:50.827 回答