如何使用SQL从文本中删除链接

时间:2011-10-12 22:28:46

标签: sql sql-server sql-server-2005

我需要通过删除表中的链接来清理数据库。所以对于这样的列条目:

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.

有没有办法用一个UPDATE语句执行此操作? 对于额外的功劳,有没有办法从链接中删除HTML语义,同时将内容留在文本中?

3 个答案:

答案 0 :(得分:1)

尝试找到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

答案 1 :(得分:0)

如果所有链接都以非常一致的方式完成,那么只需使用正则表达式替换

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

为空字符串。

我没有方便的SQL Server实例,但oracle中的查询看起来像:

update table
set col1 = REGEXP_REPLACE(col1,'\<a href.*?\</a\>', '', 1, 0, 'in');

答案 2 :(得分:0)

我想分享我的sql脚本,从文本中删除ahref标记,但保留锚文本。

来源文字:

Visit Google, then Bing

结果文字:

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

MS SQL代码:

.split()