0

我最近发现我存储在数据库中的链接没有在新选项卡中打开(否target="_blank")。我制作了这个添加它的脚本。

我的问题是,如果Preamble列有多个链接,只有第一个链接会被更新target="_blank",我怎样才能为列中的所有链接运行这个?

SELECT 
    STUFF(Preamble, CHARINDEX('>', Preamble, PATINDEX('%<a href%', Preamble)) - 1, 1, '" target="_blank"')
FROM 
    QuestionContainer
WHERE 
    Preamble LIKE '%<a href%'

Preamble 列包含其他 HTML 标记和其他文本。

更新

因此,出于某种原因,我试图将其添加target="_blank"到锚标记的末尾,而我可以将其添加到开头。
一个简单的REPLACE(Preamble, '%<a href%', '<a target="_blank" href')将连续命中所有事件并解决我的问题。- 谢谢艾伦·S·汉森

4

1 回答 1

2

尝试REPLACE功能:

DECLARE @s NVARCHAR(MAX) = '<a href="some1"><a href="some2">'
SELECT REPLACE(@s, '>', ' target="_blank">') AS Link

输出:

Link
<a href="some1" target="_blank"><a href="some2" target="_blank">

适用于您的声明:

SELECT REPLACE(Preamble, '>', ' target="_blank">')
FROM QuestionContainer
WHERE Preamble like '%<a href%'

编辑,根据@Allan 评论:

DECLARE @s NVARCHAR(MAX) = '<a href="some1"></a><a href="some2"></a>'
SELECT  REPLACE(REPLACE(@s, '>', ' target="_blank">'), '</a target="_blank">', '</a>') AS Link

编辑2:如果您有不同类型的标签,那么将替换字符串放在开头是有意义的:

DECLARE @s NVARCHAR(MAX) = '<a href="some1"></a><a href="some2"></a><b>'
SELECT  REPLACE(@s, '<a ', '<a target="_blank" ') AS Link

输出:

Link
<a target="_blank" href="some1"></a><a target="_blank" href="some2"></a><b>
于 2015-03-20T07:27:09.010 回答