2011-10-12 97 views
2

我需要通过从表中删除链接来清理数据库。因此,对于列条目是这样的:如何使用SQL从文本中删除链接

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语义,同时在文本中留下内容?

+0

什么版本的SQL Server? – Joe

+0

@Joe SQL Server 2005 - 添加到标签,thx。 – AngryHacker

+0

文字可以有多个链接吗? –

回答

0

如果所有的环节都在一个非常一致的方式做的比你可以使用的

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

一个正则表达式替换为空字符串。

我没有SQL Server实例方便,但在Oracle中查询看起来是这样的:

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

SQL Server有这个吗? – JeffO

+0

SQL Server没有REGEXP_REPLACE。 –

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 
0

我想共享我的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