SQL Server替换函数bug?

时间:2015-04-11 11:57:38

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

我是否遗漏了以下声明中的内容?

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

因为它导致:

xBxAxBx

这是已知的错误还是我错过了一些基本的东西?

微软称replace功能:

  

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

这里不是第二次xAx吗?

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:3)

不,第二个xAx不是出现。出现不能与另一次出现重叠,因此字符串中只出现两次xAx

'xAx' + 'A' + 'xAx'

考虑一下你是否做了这样的替换,这使得它更清晰:

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

如果第二个xAx计为出现次数,在替换第一次出现后,该字符串是否为-B-xAxAx?第一个x和第二个xAx之间共享的-B--B--B-是否会重复,以便在两次出现时都可以替换它?不过,这会产生结果-B-B-B-而不是{{1}}。