首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server字符替换

Server字符替换
EN

Stack Overflow用户
提问于 2021-10-20 13:30:43
回答 1查看 322关注 0票数 1

我正在尝试从Server 2019中的文本中删除/替换某些unicode符号字符。

我使用的服务器/DB具有排序规则Latin1_General_CI_AS。

我无法更改服务器/DB的排序规则,所以我尝试了这个方法(大多数情况下,它可以工作,但是一些符号不起作用)。

环境:

Server版本:

Microsoft 2019 (RTM) (KB4583458) - 15.0.2080.9 (X64) 2020年11月6日16:50:01版权(C) 2019微软公司开发版(64位)在Windows10Pro10.0 (Build 19041:)

服务器排序规则: Latin1_General_CI_AS

数据库排序规则: Latin1_General_CI_AS

本例按预期工作:

代码语言:javascript
复制
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符号(⚶)是第一个字符时才能工作,但如果它前面有另一个字符:,则不起作用。

代码语言:javascript
复制
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 (正确)

⚶(错)

有谁知道为什么替换使用一些字符/字符顺序,而有些则不工作呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-20 13:38:08

我建议在处理这些字符时使用二进制排序规则。非二进制校对有一个习惯,不真正“知道如何处理”,这样的字符在你的问题。另一方面,二进制字符可以很好地处理它们,因为每个字符都被视为一个明显不同的字符:

代码语言:javascript
复制
SELECT REPLACE(N'⚶a' COLLATE Latin1_General_100_BIN2, N'⚶' COLLATE Latin1_General_100_BIN2, N'XXX');
SELECT REPLACE(N'a⚶' COLLATE Latin1_General_100_BIN2, N'⚶' COLLATE Latin1_General_100_BIN2, N'XXX');

但是,请注意,如果您希望N'⚶A'被替换,那么它不会被替换,因为'A''a'在二进制排序规则中并不等价。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69646937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档