为什么在SQL函数中替换(' aaaaaaa','' b')并不能取代所有' a'信吗?

时间:2017-09-26 08:31:21

标签: sql-server tsql

我遇到了T-SQL中select replace('aaaaaaa', 'a', 'b')的问题(SQL Server 2012)。我没有尝试过其他版本的SQL。

我认为获得'bbbbbbb'但结果为'aaaaaab'

当我尝试更多测试时,我发现replace不会替换为'aa'(双重' a')但是使用单个' a' ;

实施例: - 如果我执行replace('aa1a11a11a', 'a', 'b'),则结果为'aa1b11b11b'(它不会取代' aa')

有人知道为什么吗?它是来自T-SQL的错误还是设计功能?

编辑2017.09.28:  - 谢谢你们。我现在已经清楚了解Sepupic的详细答案。

2 个答案:

答案 0 :(得分:9)

替换确实按预期工作:

enter image description here

你还有另外一个问题,也许并非所有问题都是' a'人物是' a'?也许它们是其他符号,例如,西里尔语' a'?

............................................... ..........

在阅读有关丹麦整理和' aa'的评论后,我能够重现它。 所以 Richard 是对的,这是repro:

declare @t table (col varchar(100) collate Danish_Norwegian_CI_AI);
insert @t values ('aaaaaa')
select replace(col, 'a', 'b')
from @t;

以下是解决此问题的方法:

declare @t table (col varchar(100) collate Danish_Norwegian_CI_AI);
insert @t values ('aaaaaa')
select replace(col collate Danish_Norwegian_BIN2, 'a', 'b')
from @t;

答案 1 :(得分:0)

正如评论中所提到的,我能够在SQL Server 2016上重现。

@sepupic,根据您的要求: enter image description here

<强>更新 不幸的是,它仍然无效。我真的没有把你的腿拉到这里! enter image description here