SQL 服务器替换函数具有带有 unicode 修饰符的奇怪行为
SQL Server replace function has odd behavior with unicode modifier character
我的数据中有一些半角 unicode 字符(特别是 U+FF9F),它们似乎干扰了 replace
函数:
select replace(convert(nvarchar(max), N'"'), N'"', N'""')
returns ""
符合预期,但是
select replace(convert(nvarchar(max), N'"゚'), N'"', N'""')
returns 输入字符串不受影响:"゚
。我相信这是由于 SQL 服务器将双字符序列解释为不同于 "
本身。
有没有办法让 replace
函数用两个替换双引号字符?
编辑:这个问题与 Replacing a specific Unicode Character in MS SQL Server 中的答案略有不同。那个问题问的是去掉一个半角字符,而这个问题是关于修改一个半角字符旁边的一个字符。在这两个问题中,都需要将排序规则设置为 Latin1_General_BIN
使用 COLLATE Latin1_General_BIN 处理 Unicode 字符。
SELECT REPLACE(CONVERT(nvarchar(max), N'"゚') COLLATE Latin1_General_BIN, N'"', N'""')
我的数据中有一些半角 unicode 字符(特别是 U+FF9F),它们似乎干扰了 replace
函数:
select replace(convert(nvarchar(max), N'"'), N'"', N'""')
returns ""
符合预期,但是
select replace(convert(nvarchar(max), N'"゚'), N'"', N'""')
returns 输入字符串不受影响:"゚
。我相信这是由于 SQL 服务器将双字符序列解释为不同于 "
本身。
有没有办法让 replace
函数用两个替换双引号字符?
编辑:这个问题与 Replacing a specific Unicode Character in MS SQL Server 中的答案略有不同。那个问题问的是去掉一个半角字符,而这个问题是关于修改一个半角字符旁边的一个字符。在这两个问题中,都需要将排序规则设置为 Latin1_General_BIN
使用 COLLATE Latin1_General_BIN 处理 Unicode 字符。
SELECT REPLACE(CONVERT(nvarchar(max), N'"゚') COLLATE Latin1_General_BIN, N'"', N'""')