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)
的1
s为第一次匹配,并且2
s为第二场比赛.完成第一次更换后,该功能正在查看第二次A
,并且不会备份.A.A
不是匹配,所以它向前看,看着.A.
.
换句话说,您正在尝试匹配重叠的字符串.这就像试图取代bob
与job
在以下几点:
bobob
Run Code Online (Sandbox Code Playgroud)
你期待看到jojob
,但这不是它的工作原理.在第一次替换后,你有jobob
,但替换功能已经转移到第二次o
.它不再看到bob
s,所以它停止了.
归档时间: |
|
查看次数: |
112 次 |
最近记录: |