Я использовал аналогичный подход к некоторым из приведенных выше ответов, используя сопоставление с образцом и переворачивая строку, чтобы найти первый необрезанный символ, а затем обрезал его.Разница в том, что эта версия работает меньше, чем приведенные выше, поэтому она должна быть немного более эффективной.
- Это создает функциональность
RTRIM
для любого указанного символа. - Она включает в себя дополнительныйшаг
set @charToFind = case...
для экранирования выбранного символа. - В настоящее время существует проблема, если
@charToReplace
является правым крючком (]
), поскольку, по-видимому, нет способа избежать этого.
.
declare @stringToSearch nvarchar(max) = '****this is****a ** demo*****'
, @charToFind nvarchar(5) = '*'
--escape @charToFind so it doesn't break our pattern matching
set @charToFind = case @charToFind
when ']' then '[]]' --*this does not work / can't find any info on escaping right crotchet*
when '^' then '\^'
--when '%' then '%' --doesn't require escaping in this context
--when '[' then '[' --doesn't require escaping in this context
--when '_' then '_' --doesn't require escaping in this context
else @charToFind
end
select @stringToSearch
, left
(
@stringToSearch
,1
+ len(@stringToSearch)
- patindex('%[^' + @charToFind + ']%',reverse(@stringToSearch))
)