【问题标题】:Replace last matched substring of string替换字符串的最后一个匹配子串
【发布时间】:2021-03-19 05:24:09
【问题描述】:

我想替换一个匹配的字符串的最后一个子字符串

例子

DECLARE @string NVARCHAR(MAX)= 'Greeting<br><br>As many offices move to remote work. <br><br>Have a good day<br><br>'

SELECT REPLACE(@string,'<br><br>','')

结果需要

 @string = 'Greeting<br><br>As many offices move to remote work. <br><br>Have a good day'

需要将最后两个
替换为空

【问题讨论】:

  • 你如何定义“字符串的最后一个子串”?
  • 我尝试了替换,但所有
    都会被替换
  • @DaleKi 已编辑问题请检查一次,我需要替换字符串的最后一个,但我的代码替换了所有
  • 如果它总是最后 8 个字符,只需使用子字符串。

标签: sql sql-server tsql stored-procedures


【解决方案1】:

如果性能没有问题,可以试试倒弦,然后剪掉第一段再倒回去

DECLARE @string NVARCHAR(MAX)= 'Greeting<br><br>As many offices move to remote work. <br><br>Have a good day<br><br>'

declare @pat nvarchar(max) = (select REVERSE('<br><br>'))
declare @rsv nvarchar(max) = (select REVERSE(@string))
declare @idx int = (select CHARINDEX(@pat, @rsv, 0))

declare @result nvarchar(max) = (select left(@rsv, @idx - 1) + right(@rsv, len(@rsv) - @idx - LEN(@pat) + 1))
set @result = reverse(@result)

print @result

结果是:

Greeting<br><br>As many offices move to remote work. <br><br>Have a good day

您可以缩短代码。我只是把它写得很详细,所以逻辑会很清楚。

【讨论】:

    【解决方案2】:

    如果它总是在结尾,另一种更简单的方法是在字符串中添加一个特殊字符,然后替换包括那个。

    select @string=Replace(@string+'~','<br><br>~','')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-07
      • 2016-06-13
      • 2014-08-01
      • 1970-01-01
      • 2012-03-10
      • 2014-08-15
      • 2011-12-09
      相关资源
      最近更新 更多