【发布时间】:2010-04-12 15:21:13
【问题描述】:
我在 SQL Server 2005 中有一个包含数百行 HTML 内容的表。某些内容具有 HTML 格式,例如:
<span class=heading-2>Directions</span>
“路线”根据页面名称而变化。
我需要将所有<span class=heading-2> 和</span> 标签更改为<h2> 和</h2> 标签。
我在过去编写了这个查询来进行内容更改,但由于结束 HTML 标记,它不适用于我当前的问题:
Update ContentManager
Set ContentManager.Content = replace(Cast(ContentManager.Content AS NVARCHAR(Max)), 'old text', 'new text')
有谁知道我可以如何在 T-SQL 中完成跨度到 h2 的替换?我发现的一切都表明我必须进行 CLR 集成。谢谢!
【问题讨论】:
-
这可能是因为纯 T-SQL 不支持正则表达式,并且在字符串操作方面通常很弱......这就是 SQL-CLR 的原因!
-
哇,请不要为此使用 TSQL :)
-
@timmerk - 确认一下,这是对具有特定模式的标签的一次性更新,很少或没有例外?如果有些人被遗漏了,这将是世界末日还是仅仅是进入并手动纠正的工作?
-
也许应该更恰当地表述这个问题:“如何在 SQL Server 中转换 HTML 标记?”那么很明显,这不是 SQL Server 非常适合的工作,也许您应该编写一个小型应用程序来执行这项工作。与想出一些只能在 95% 的时间里工作并让你后来头疼的人为 SQL 表达式相比,这需要付出多少努力?
-
@Michael Petito - 假设 95% 对于这样的一次性更新来说绰绰有余,并且可以手动修复 5%?假设他们告诉你 10% 可以吗?您还会考虑使用 Html 解析解决方案吗?当有一个足以胜任工作的解决方案时,您如何证明在您的时间内为不需要完美的事情提供一次性解决方案所付出的巨大机会成本是合理的?并非每个 Html 解析问题都绝对要求必须使用完整的 Html 解析器。具有可接受的未命中率的特定和受限标记的一次性更新就是一个很好的例子。
标签: sql sql-server regex tsql