我试图编写一个函数来将罗马尼亚变音字母(ĂÂÎȘȚ
)替换为它们的拉丁字母(AAIST
)。
SQL Server的replace
函数处理Ă
,Â
和Î
就好了。
Ș
和Ț
似乎有一个奇怪的问题:只有在字符串的开头找到它们才会被替换。
select replace(N'Ș', N'Ș', N'-')
-- '-' # OK
select replace(N'ȘA', N'Ș', N'-')
-- '-A' # OK
select replace(N'AȘ', N'Ș', N'-')
-- 'AȘ' # WHAT??
select replace(N'ȘAȘ', N'Ș', N'-')
-- '-AȘ' # WHAT??
我设法在SQL Sever 2008 R2和SQL Server 2012上重现了这种行为。
对这些看似奇怪的结果有解释吗?或者它可能只是一个错误?
我的默认数据库归类是SQL_Latin1_General_CP1_CI_AS
。
答案 0 :(得分:2)
这是一个整理问题。
初看起来,我不得不重现,因为它是不可思议的,但你的查询对我来说也有同样的问题。
如果您尝试使用正确的排序规则,它可以正常运行:
select replace(N'AȘ' COLLATE Latin1_General_BIN, N'Ș', N'-')