我正在尝试从 SQL Server 2019 中的文本中删除/替换某些 unicode 符号字符。
我正在使用的服务器/数据库具有排序规则 Latin1_General_CI_AS。
我无法更改服务器/数据库的排序规则,所以我尝试了这个(大多数情况下它可以工作,但有些符号不起作用)。
环境:
SQL Server 版本:
Microsoft SQL Server 2019 (RTM-GDR) (KB4583458) - 15.0.2080.9 (X64) Nov 6 2020 16:50:01 Copyright (C) 2019 Microsoft Corporation Developer Edition (64-bit) on Windows 10专业版 10.0(内部版本 19041:)
服务器排序规则:Latin1_General_CI_AS
数据库排序规则:Latin1_General_CI_AS
此示例按预期工作:
select replace(N'☋a' collate Latin1_General_100_CI_AI_SC, N'☋' collate Latin1_General_100_CI_AI_SC, N'XXX')
select replace(N'a☋' collate Latin1_General_100_CI_AI_SC, N'☋' collate Latin1_General_100_CI_AI_SC, N'XXX')
输出:
XXXa
aXXX
此示例仅在 unicode 符号 (⚶) 是第一个字符时有效,但如果另一个字符位于它之前则无效:
select replace(N'⚶a' collate Latin1_General_100_CI_AI_SC, N'⚶' collate Latin1_General_100_CI_AI_SC, N'XXX')
select replace(N'a⚶' collate Latin1_General_100_CI_AI_SC, N'⚶' collate Latin1_General_100_CI_AI_SC, N'XXX')
输出:
XXXa(正确)
a⚶(错误)
有谁知道为什么替换适用于某些字符/字符顺序,而有些则不行?