SQL 服务器:多个字符的索引
SQL Server : index of multiple characters
我最近发现我存储在数据库中的链接无法在新标签页中打开(没有 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%'
序言列包含其他 HTML 标记和其他文本。
更新
所以出于某种原因,我试图将 target="_blank"
添加到锚标记的末尾,而不是我可以将它添加到开头。
一个简单的 REPLACE(Preamble, '%<a href%', '<a target="_blank" href')
将连续命中所有事件并解决我的问题。 - 感谢 Allan S. Hansen
尝试使用 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>
我最近发现我存储在数据库中的链接无法在新标签页中打开(没有 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%'
序言列包含其他 HTML 标记和其他文本。
更新
所以出于某种原因,我试图将 target="_blank"
添加到锚标记的末尾,而不是我可以将它添加到开头。
一个简单的 REPLACE(Preamble, '%<a href%', '<a target="_blank" href')
将连续命中所有事件并解决我的问题。 - 感谢 Allan S. Hansen
尝试使用 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>