【问题标题】:SQL Server : index of multiple charactersSQL Server:多个字符的索引
【发布时间】:2015-03-20 07:22:02
【问题描述】:

我最近发现我存储在数据库中的链接无法在新选项卡中打开(不是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, '%&lt;a href%', '&lt;a target="_blank" href') 将连续命中所有事件并解决我的问题。 - 谢谢艾伦 S. 汉森

【问题讨论】:

  • update questioncontainer set preamble = replace(preamble, '&lt;a href', '&lt;a href target="_blank" ') 之类的东西不会这样做吗? (当然这并没有考虑到你已经完成的那些,需要先将它们替换回来:))否则你需要编写一个循环/函数来拆分你的列并重新处理你的索引
  • 这个。但前提是它们都没有它,否则你将不得不排除包含“_blank”的那些。
  • @AllanS.Hansen 序言列包含其他 HTML 标记和其他文本。
  • 这就是为什么你需要替换 &lt;a href 以确保它不会在其他 html 上触发
  • REPLACE('&lt;a href=some.website/default.asp"&gt;Department’s Purchasing and Procurement Instructions&lt;/a&gt;', '&lt;a href', '&lt;a target="_blank" href'); 似乎有效,然后它只是用您的列替换实际文本并更新

标签: sql-server charindex


【解决方案1】:

试试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>

【讨论】:

  • 超链接通常以 结尾
  • @GiorgiNakeuri 这是有道理的,但我有大约 100 行,我仍然需要将链接复制粘贴到我想要避免的 DECLARE 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多