【问题标题】:SQL Server replace function bug?SQL Server 替换函数错误?
【发布时间】:2015-04-11 11:57:37
【问题描述】:

我在以下陈述中遗漏了什么吗?

select replace('xAxAxAx', 'xAx', 'xBx')

因为它会导致:

xBxAxBx

这是已知的错误还是我在这里遗漏了一些基本的东西?

微软说replace函数:

用另一个替换所有出现的指定字符串值 字符串值。

这里不是出现第二个xAx 吗?

【问题讨论】:

  • 你希望结果是什么?
  • @GordonLinoff,我知道我可以用replace('xAxAxAx', 'A', 'B') 得到想要的结果,但我希望用replace('xAxAxAx', 'xAx', 'xBx') 替换行为结果xBxBxBx

标签: sql-server sql-server-2008 sql-server-2012 sql-server-2014


【解决方案1】:

这只是定义什么是事件以及如何处理重叠实例的问题。这正是我期望它工作的方式,因为处理一次出现的数据意味着'xAxAxAx'是xAx + A + xAx - 无论第一次替换的结果是什么,都不会被视为新出现,因此这两个被替换。

同样,replace('xx', 'x', 'xx') 的结果是 xxxx,而不是 xxxxxxxxxx....

【讨论】:

    【解决方案2】:

    不,第二个xAx 不会发生。一个出现不能与另一个出现重叠,所以字符串中只有两个出现xAx

    'xAx' + 'A' + 'xAx'
    

    考虑一下你是否做了这样的替换,这样会更清楚一点:

    replace('xAxAxAx', 'xAx', '-B-')
    

    如果第二个xAx 算作一次出现,那么在替换第一次出现之后,字符串是否会是-B-xAxAx?在第一个 xAx 和第二个之间共享的 x 是否会被复制,以便在两种情况下都可以替换它?尽管如此,结果还是-B--B--B- 而不是-B-B-B-

    【讨论】:

      猜你喜欢
      • 2020-07-04
      • 2018-01-07
      • 2021-04-28
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      相关资源
      最近更新 更多