我遇到了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的详细答案。
答案 0 :(得分:9)
替换确实按预期工作:
你还有另外一个问题,也许并非所有问题都是' 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)