3

我想替换或删除这两个字符之间的所有字符 < > 它们在整个字段中多次出现,并且在每行的不同情况下

我相信要替换的字符串是 html,所以当我尝试发布一个示例时,该网站只是将其注册为格式。

我使用替换来删除所有常见的字符串,例如用于换行的 html,但一些使用十六进制颜色值的字段因字段而异。

谢谢!

4

4 回答 4

4
DECLARE @foo TABLE(TAGS VARCHAR(MAX));
INSERT @foo VALUES('<fname>John</fname><lname>Dewey</lname>');

SELECT 1; --This will initialize @@ROWCOUNT if necessary. Might be optional depending on your query
WHILE @@ROWCOUNT > 0 BEGIN
    UPDATE @foo
    SET TAGS = STUFF(TAGS,CHARINDEX('<',TAGS),CHARINDEX('>',TAGS) - CHARINDEX('<',TAGS) + 1,'')
    WHERE TAGS LIKE '%<%>%'
END
SELECT * FROM @foo;

结果

------------------------
JohnDewey
于 2012-06-22T02:56:38.423 回答
2
CREATE TABLE #html(Value NVARCHAR(MAX))
INSERT INTO #html(Value) VALUES('<ShouldBeRemoved>1 <Remove>abc<also remove>def<Take this out>ghi')
INSERT INTO #html(Value) VALUES('<ShouldBeRemoved>2 <Remove>abc<also remove>def<Take this out>ghi')
INSERT INTO #html(Value) VALUES('<ShouldBeRemoved>3 <Remove>abc<also remove>def<Take this out>ghi')

;with Cte(Value) AS (
    SELECT Value FROM #html
    UNION ALL
    SELECT REPLACE(Value, SUBSTRING(Value, CHARINDEX('<', Value), CHARINDEX('>', Value) - CHARINDEX('<', Value) + 1),'')
    FROM Cte
    WHERE CHARINDEX('<', Value) != 0
)
SELECT Value FROM Cte
WHERE CHARINDEX('<', Value) = 0
OPTION (MAXRECURSION 0);

DROP TABLE #html
于 2012-06-22T02:35:59.303 回答
0

此代码适用于希望避免调用 UDF(用户定义函数)的人。假设你的一个 sql 表 col. 包含如下 HTML 标记,您想删除 和 之间的所有<内容>[Remark] =" the HTML tags like: < div > < p >< span > We are trying to contact the company (Tel:&nbsp;< /span >< span> < /p > < /div > etc' "

步骤#1:将结果集存储到 Temp 表

select .... into #t1 from....where...blah blah 

步骤#2:使用以下代码删除 < 和 > 之间的所有内容并更新字段。

WHILE @@ROWCOUNT > 0 BEGIN
    UPDATE #t1
    SET [Remark] = LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LTRIM(RTRIM(STUFF([Remark],CHARINDEX('<',[Remark]),CHARINDEX('>',[Remark]) - CHARINDEX('<',[Remark]) + 1,'') )), CHAR(9), ' '), CHAR(10), ' '), CHAR(11), ' '), CHAR(12), ' '), CHAR(13), ' '), '&nbsp;', '')))
    WHERE [Remark] LIKE '%<%>%'
END

Step#3 : 从 Temp 表中选择您想要的结果

SELECT * FROM #t1 
于 2020-06-13T14:23:04.897 回答
0
CREATE FUNCTION [dbo].[udf_RemoveHtmlTag] (@HTMLText VARCHAR(MAX))
RETURNS VARCHAR(MAX)
AS
BEGIN
    WHILE((CHARINDEX('<', @HTMLText)>0) and (CHARINDEX('>', @HTMLText)>0))
    Begin
        SET @HTMLText = REPLACE(@HtmlText,SUBSTRING(@HTMLText, CHARINDEX('<', @HTMLText), CHARINDEX('>', @HTMLText) - CHARINDEX('<', @HTMLText) + 1),'');       
    End

    RETURN @HTMLText
END
GO

那么如何使用这个函数

select [dbo].[udf_RemoveHtmlTag]([column_name]) from tablename 
于 2017-08-04T12:04:09.390 回答