替换最后匹配的字符串子串

时间:2021-03-19 05:24:09

标签: sql sql-server tsql stored-procedures

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

示例

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'

需要用空替换最后两个

2 个答案:

答案 0 :(得分:0)

如果性能不成问题,您可以尝试反转字符串,然后将第一部分切掉并反转回来

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

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

答案 1 :(得分:0)

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

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