Как удалить ссылки из текста с помощью SQL - PullRequest
2 голосов
/ 13 октября 2011

Мне нужно очистить базу данных, удалив ссылки из таблиц.Таким образом, для записи в столбец, как это:

Thank you for the important information<br /><a href="http://www.cnn.com">Read More Here</a><br />  This is great.

мне нужно удалить всю ссылку, так что это будет выглядеть так:

Thank you for the important information<br /><br />  This is great.

Есть ли способ сделать это сединственное утверждение ОБНОВЛЕНИЕ?Для дополнительного кредита, есть ли способ удалить семантику HTML из ссылки, оставив содержание в тексте?

Ответы [ 3 ]

1 голос
/ 13 октября 2011

Просто попробуйте найти начало и конец hrefj и замените его одним пробелом.

declare @StringToFix varchar(500)
set @StringToFix = 'Thank you for the important information<br /><a href="http://www.cnn.com">Read More'

select REPLACE(
        @stringtofix
        , Substring(@StringToFix
            , CHARINDEX('<a href=', @StringToFix) -- Starting Point
                           -- End Point - Starting Point with 4 more spaces
            , CHARINDEX('</a>', @StringToFix) 
                              - CHARINDEX('<a href=', @StringToFix) +4            )
        , ' '
    ) as ResultField
0 голосов
/ 29 марта 2016

Я хочу поделиться своим сценарием sql, который удаляет тег ahref из текста, но оставляет текст привязки.

Исходный текст:

Visit <a href="http://google.com/">Google</a>, then <a href="http://bing.com">Bing</a>

Результат:

Visit Google, then Bing

КОД MS SQL:

declare @str nvarchar(max) = 'Visit <a href="http://google.com/">Google</a>, then <a href="http://bing.com">Bing</a>'

declare @aStart int = charindex('<a ', @str)
declare @aStartTagEnd int = charindex('>', @str, @aStart)

DECLARE @result nvarchar(max) = @str;

set @result = replace(@result, '</a>', '')

select @result

WHILE (@aStart > 0 and @aStartTagEnd > 0)
BEGIN

    declare @rep1 nvarchar(max) = substring(@result, @aStart, @aStartTagEnd + 1 - @aStart)

    set @result = replace(@result, @rep1, '')

    set @aStart = charindex('<a ', @result)
    set @aStartTagEnd = charindex('>', @result, @aStart)

END 

select @result
0 голосов
/ 13 октября 2011

Если все ссылки сделаны очень последовательным образом, тогда вы можете просто использовать регулярное выражение вместо

'\<a href.*?\</a\>' 

в пустую строку.

У меня нет удобного экземпляра SQL Server, но запрос в oracle будет выглядеть примерно так:

update table
set col1 = REGEXP_REPLACE(col1,'\<a href.*?\</a\>', '', 1, 0, 'in');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...