SQL服务器替换功能错误?

SQL Server replace function bug?

我在下面的语句中遗漏了什么吗?

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

因为它导致:

xBxAxBx

这是已知错误还是我遗漏了一些基本信息?

Microsoft 表示 replace 函数:

Replaces all occurrences of a specified string value with another string value.

这里不是第二个xAx吗?

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

'xAx' + 'A' + 'xAx'

想想你是否做了这样的替换,这样就更清楚了:

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

如果第二个xAx算作一次出现,替换第一次出现后,字符串会是-B-xAxAx吗?第一个 xAx 和第二个 xAx 之间共享的 x 是否会被复制,以便在两次出现时都可以替换它?不过,这会使结果 -B--B--B- 而不是 -B-B-B-.

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

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