Не уверен, что это лучше или нет, но попробуйте выполнить запрос ниже:
DECLARE @MainString NVARCHAR(MAX) ='i want to how tags are <span style="color: #9bbb59;">
<span style="text-decoration: underline;">I am testing for another string</span>
</span>'
DECLARE @startIndex INT, @endIndex INT
SET @startIndex = CHARINDEX('<span style="text-decoration: underline;">',@MainString,CHARINDEX('<span style="text-decoration: underline;">',@MainString)) + 42
SET @endIndex = CHARINDEX('</span>',@MainString,CHARINDEX('<span style="text-decoration: underline;">',@MainString))
DECLARE @text NVARCHAR(MAX) = (SELECT SUBSTRING(@MainString,@startIndex,@endIndex - @startIndex))
SET @MainString = (SELECT REPLACE(@MainString, '<span style="text-decoration: underline;">','<span style="text-decoration: underline;"><u>'))
SET @MainString = ( SELECT REPLACE(@MainString, '<u>' + @text + '</span>','<u>' + @text + '</u></span>'))
SELECT @MainString
Что выводит как ожидалось:
i want to how tags are
<span style="color: #9bbb59;">
<span style="text-decoration: underline;">
<u>I am testing for another string</u>
</span>
</span>