Заменить последнюю согласованную подстроку строки

#sql #sql-server #tsql #stored-procedures

#sql #sql-сервер #tsql #хранимые процедуры

Вопрос:

Я хочу заменить согласованную последнюю подстроку строки

Пример

 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'
 

Необходимо заменить последние две
на пустые

Комментарии:

1. И как вы определяете «последнюю подстроку строки»?

2. Я попытался заменить, но все <br> будут заменены

3. @DaleKi отредактировал вопрос, пожалуйста, проверьте один раз, мне нужно изменить последнюю строку, но мой код заменяет все <br>

4. Если это всегда последние 8 символов, просто используйте substring .

Ответ №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>~','')