我是否遗漏了以下声明中的内容?
select replace('xAxAxAx', 'xAx', 'xBx')
因为它导致:
xBxAxBx
这是已知的错误还是我错过了一些基本的东西?
微软称replace
功能:
将所有出现的指定字符串值替换为另一个 字符串值。
这里不是第二次xAx
吗?
答案 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}}。