Вы были довольно близко ... проблема в том, что третий параметр SUBSTRING
- это длина, а не позиция, на которой нужно останавливаться.
DECLARE @RowsUpdated INT
SET @RowsUpdated = 1
WHILE (@RowsUpdated > 0)
BEGIN
UPDATE #TEMP_PN
SET [note_text] =
REPLACE(
[note_text],
substring(
[note_text],
CHARINDEX('<',[note_text]),
CHARINDEX(
'>',
SUBSTRING([note_text], CHARINDEX('<',[note_text]), 1 + LEN([note_text]) - CHARINDEX('<',[note_text]))
)
),
'')
from #TEMP_PN
where [note_text] LIKE '%Microsoft-com%' and [note_text] like '%<%>%'
SET @RowsUpdated = @@ROWCOUNT
END
SELECT * FROM #TEMP_PN
ВТОРОЕ РЕДАКТИРОВАНИЕ:
ОК, я обновил оба запроса; этот код теперь должен обрабатывать ведущий >
перед первым тегом ... который, я думаю, мог быть проблемой.
DECLARE @TestString VARCHAR(MAX)
SELECT @TestString = '><DIV class=gc-message-sms-row><SPAN class=gc-message-sms-from>TLS: </SPAN><SPAN class=gc-message-sms-text>Hi Reggie... I''m on my way to Lynn.. see you soon</SPAN> <SPAN class=gc-message-sms-time>3:09 PM </SPAN></DIV>'
DECLARE @RowsUpdated INT
SET @RowsUpdated = 1
WHILE (@RowsUpdated > 0)
BEGIN
SELECT
@TestString =
REPLACE(
@TestString,
substring(
@TestString,
CHARINDEX('<',@TestString),
CHARINDEX(
'>',
SUBSTRING(@TestString, CHARINDEX('<',@TestString), 1 + LEN(@TestString) - CHARINDEX('<',@TestString))
)
),
'')
WHERE @TestString LIKE '%<%>%'
SET @RowsUpdated = @@ROWCOUNT
END
SELECT @TestString
Может быть, потому что эта записка не соответствует критериям [note_text] LIKE '%Microsoft-com%'
?