Pரத*_*ீப் 3 sql t-sql sql-server replace sql-server-2008
谁能解释为什么Replace功能并不能取代所有出现string_pattern用string_replacement?
select REPLACE(' A A A A ',' A ',' B ')
Run Code Online (Sandbox Code Playgroud)
输出: B A B A
预期产出: B B B B
select REPLACE('.A.A.A.A.','.A.','.B.')
Run Code Online (Sandbox Code Playgroud)
输出: .B.A.B.A.
预期产量: .B.B.B.B.
在上面的查询中,为什么只替换备用值?
我知道上面的问题可以通过添加一个替换来修复.
select replace(REPLACE('.A.A.A.A.A.A.A.A.A.','.A.','.B.'),'.A.','.B.')
Run Code Online (Sandbox Code Playgroud)
但是,为什么单Replace 并不取代一切的发生string_pattern与string_replacement
任何人都可以解释发生了什么?
第一个空格(或句点)在第一个空格(或句号)之后A计为第一个匹配的一部分.例:
.A.A.A.A.
111 222
Run Code Online (Sandbox Code Playgroud)
的1s为第一次匹配,并且2s为第二场比赛.完成第一次更换后,该功能正在查看第二次A,并且不会备份.A.A不是匹配,所以它向前看,看着.A..
换句话说,您正在尝试匹配重叠的字符串.这就像试图取代bob与job在以下几点:
bobob
Run Code Online (Sandbox Code Playgroud)
你期待看到jojob,但这不是它的工作原理.在第一次替换后,你有jobob,但替换功能已经转移到第二次o.它不再看到bobs,所以它停止了.