2011-10-12 21 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