用一些单词替换变长字符串

The*_*war 0 sql t-sql sql-server sql-server-2012

鉴于以下字符串

Declare @string varchar(max)='abc ___________ deffns ___ cg _ hif _______hh ihs';
Run Code Online (Sandbox Code Playgroud)

这是所需的输出 :(不管长度如何,每次炒作都应该用姓氏替换)

abc lastname deffns lastname cg lastname hif lastname hh ihs
Run Code Online (Sandbox Code Playgroud)

这里的问题是,可以有很多Hypens可变长度(最大长度可以<20)......

我尝试了很多方法并采用以下方法解决..

select 
REPLACE(REPLACE(replace(stringcol,replicate('_',20),'LASTNAME'),
replicate('_',19),'LASTNAME'),
replicate('_',18),'LASTNAME')
 from table
Run Code Online (Sandbox Code Playgroud)

有没有办法有效地完成这一点.任何建议都会受到欢迎

Gor*_*off 11

首先摆脱多个下划线,然后进行替换.

这是一种方法:

select replace(replace(replace(@string, '_', '><'
                              ), '<>', ''
                      ), '><', 'LASTNAME'
              )
Run Code Online (Sandbox Code Playgroud)

  • 乍一看,我想......"呃.没什么特别的".然后我看到了扩展,减少和剩余的逻辑.简单明了,真正优雅的解决方案. (3认同)