【问题标题】:replace only matches the beginning of the stringreplace 只匹配字符串的开头
【发布时间】:2014-12-18 12:39:28
【问题描述】:

我正在尝试编写一个函数,将罗马尼亚变音字母 (ĂÂÎȘȚ) 替换为对应的拉丁字母(分别为 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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      • 2014-01-15
      • 2020-08-30
      • 1970-01-01
      • 1970-01-01
      • 2011-04-12
      相关资源
      最近更新 更多