#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>~','')