admin

SQL-删除字符串中的所有HTML标记

sql

在我的数据集中,我有一个字段,用于存储用HTML标记的文本。通用格式如下:

<html><head></head><body><p>My text.</p></body></html>

我可以尝试通过以下方法解决问题:

REPLACE(REPLACE(Table.HtmlData, '<html><head></head><body><p>', ''), '</p></body></html>')

但是,这不是严格的规则,因为 某些条目违反了W3C标准, 并且不包含<head>标签。更糟的是, 可能会缺少结束标记
。因此,我需要REPLACE为每个可能存在的开始和结束标记包括函数。

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
    Table.HtmlData,
    '<html>', ''),
    '</html>', ''),
    '<head>', ''),
    '</head>', ''),
    '<body>', ''),
    '</body>', ''),
    '<p>', ''),
    '</p>', '')

我想知道是否有比使用多个嵌套REPLACE函数更好的方法来完成此任务。不幸的是,我在这种环境中只能使用的语言是SQL和Visual
Basic(不是.NET)。


阅读 112

收藏
2021-05-10

共1个答案

admin

DECLARE @x XML = '<html><head></head><body><p>My text.</p></body></html>'

SELECT t.c.value('.', 'NVARCHAR(MAX)')
FROM @x.nodes('*') t(c)

更新-对于带有未关闭标签的字符串:

DECLARE @x NVARCHAR(MAX) = '<html><head></head><body><p>My text.<br>More text.</p></body></html>'

SELECT x.value('.', 'NVARCHAR(MAX)')
FROM (
    SELECT x = CAST(REPLACE(REPLACE(@x, '>', '/>'), '</', '<') AS XML)
) r
2021-05-10