replace只匹配字符串的开头

时间:2014-12-18 12:39:28

标签: sql-server replace sql-server-2008-r2 sql-server-2012 diacritics

我试图编写一个函数来将罗马尼亚变音字母(ĂÂÎȘȚ)替换为它们的拉丁字母(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

1 个答案:

答案 0 :(得分:2)

这是一个整理问题。
初看起来,我不得不重现,因为它是不可思议的,但你的查询对我来说也有同样的问题。

如果您尝试使用正确的排序规则,它可以正常运行:

select replace(N'AȘ' COLLATE Latin1_General_BIN, N'Ș', N'-')