sql-server - 替换仅匹配字符串的开头

标签 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

最佳答案

这是一个排序问题。
乍一看,我不得不重现,因为它令人难以置信,但你的查询对我来说也有同样的问题。

如果您尝试使用正确的排序规则,它会起作用:

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

关于sql-server - 替换仅匹配字符串的开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27546811/

相关文章:

c# - 我需要从表中获取数字类型列

c# - 使用 using 释放连接和命令

java 将特殊字符替换为文本

sql-server - 我是否必须将大值数据类型存储在单独的表中?

JAVA替换一个String,无需多次替换

python - 使用 Python 替换列表中的值

sql-server - 带有 DateTimeoffset 的 DateAdd 有时会删除偏移量

sql-server - 将图像存储在数据库中还是服务器上?

sql-server - Tomcat 找不到 Microsoft SQL 驱动程序类

c# - Oracle 的顺序(梳状)GUID