小编典典

如何从SQL Server中的字符串中剥离HTML标记?

sql

我在SQL Server2005中有包含HTML标记的数据,我想将所有内容都剥离掉,只在标记之间保留文本。理想的情况下也更换喜欢的东西&lt;<

有没有简单的方法可以做到这一点,或者有人已经获得了一些示例T-SQL代码?

我没有添加扩展存储的proc之类的功能,因此更喜欢纯T-SQL方法(最好是一种与SQL 2000向后兼容的方法)。

我只想使用剥离的HTML来检索数据,而不是对其进行更新,因此理想情况下,它将被编写为用户定义的函数,以使其易于重用。

因此,例如,将其转换为:

<B>Some useful text</B>&nbsp;
<A onclick="return openInfo(this)"
   href="http://there.com/3ce984e88d0531bac5349"
   target=globalhelp>
   <IMG title="Source Description" height=15 alt="Source Description" 
        src="/ri/new_info.gif" width=15 align=top border=0>
</A>&gt;&nbsp;<b>more text</b></TD></TR>

对此:

Some useful text > more text

阅读 172

收藏
2021-05-05

共1个答案

小编典典

有一个UDF将执行此处描述的操作:

用户定义的功能以剥离HTML

CREATE FUNCTION [dbo].[udf_StripHTML] (@HTMLText VARCHAR(MAX))
RETURNS VARCHAR(MAX) AS
BEGIN
    DECLARE @Start INT
    DECLARE @End INT
    DECLARE @Length INT
    SET @Start = CHARINDEX('<',@HTMLText)
    SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
    SET @Length = (@End - @Start) + 1
    WHILE @Start > 0 AND @End > 0 AND @Length > 0
    BEGIN
        SET @HTMLText = STUFF(@HTMLText,@Start,@Length,'')
        SET @Start = CHARINDEX('<',@HTMLText)
        SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
        SET @Length = (@End - @Start) + 1
    END
    RETURN LTRIM(RTRIM(@HTMLText))
END
GO

编辑:请注意,这是针对SQL Server 2005的,但是如果将关键字MAX更改为4000,则它也将在SQL Server 2000中工作。

2021-05-05