我需要通过删除表中的链接来清理数据库。所以对于这样的列条目:
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 :(得分: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()