我正在尝试编写一个函数,将罗马尼亚语变音字母 (ĂÂÎşşş
) 替换为对应的拉丁字母(分别为AAIST
)。
SQL Server 的 replace
函数可以很好地处理 Ă
、Â
和 Î
。
不过,ş
和 ş
似乎有一个奇怪的问题:只有在字符串开头找到它们时,它们才会被替换。
对于example :
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
。
最佳答案
这是一个排序问题。
乍一看,我不得不重现,因为它令人难以置信,但你的查询对我来说也有同样的问题。
如果您尝试使用正确的排序规则,它会起作用:
select replace(N'AȘ' COLLATE Latin1_General_BIN, N'Ș', N'-')
关于sql-server - 替换仅匹配字符串的开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27546811/