【问题标题】:Replacing variable length string with some word用一些单词替换可变长度字符串
【发布时间】:2017-06-12 00:19:25
【问题描述】:

给定下面的字符串

Declare @string varchar(max)='abc ___________ deffns ___ cg _ hif _______hh ihs';

这是所需的输出:(无论长度如何,每个连字符都应替换为姓氏)

abc lastname deffns lastname cg lastname hif lastname hh ihs

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

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

select 
REPLACE(REPLACE(replace(stringcol,replicate('_',20),'LASTNAME'),
replicate('_',19),'LASTNAME'),
replicate('_',18),'LASTNAME')
 from table

有没有办法有效地做到这一点。欢迎任何建议

【问题讨论】:

  • 所显示的字符串的输出应该是什么样的?你要替换def之前的第一列_吗?
  • @vkp:请查看更新
  • 在您的示例中,您是否希望 LASTNAME 出现在 abc 和 def 之后?
  • @Tyron78:无论长度如何,每个连字符都应替换为姓氏

标签: sql sql-server tsql sql-server-2012


【解决方案1】:

先去掉多个下划线,再进行替换。

这是一种方法:

select replace(replace(replace(@string, '_', '><'
                              ), '<>', ''
                      ), '><', 'LASTNAME'
              )

【讨论】:

  • 乍一看我以为...“嗯。没什么特别的”。然后我看到了扩展、缩减和余数的逻辑。简直是绝妙且真正优雅的解决方案。
【解决方案2】:

在 C# 中,您可以使用:

string str = Regex.Replace(s, @"(_)\1{5,}", Lastname);

如果出现超过 5 个 _ 则匹配字符 _。

【讨论】:

  • 感谢您的提示
猜你喜欢
  • 2014-06-21
  • 1970-01-01
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多