小编典典

从SQL Server中的字符串中删除HTML标签的最佳方法?

html

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

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

我没有能力添加扩展的存储过程等,因此更喜欢纯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

阅读 454

收藏
2020-05-10

共1个答案

小编典典

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

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中工作。

2020-05-10