我想替换或删除这两个字符之间的所有字符 < > 它们在整个字段中多次出现,并且在每行的不同情况下
我相信要替换的字符串是 html,所以当我尝试发布一个示例时,该网站只是将其注册为格式。
我使用替换来删除所有常见的字符串,例如用于换行的 html,但一些使用十六进制颜色值的字段因字段而异。
谢谢!
我想替换或删除这两个字符之间的所有字符 < > 它们在整个字段中多次出现,并且在每行的不同情况下
我相信要替换的字符串是 html,所以当我尝试发布一个示例时,该网站只是将其注册为格式。
我使用替换来删除所有常见的字符串,例如用于换行的 html,但一些使用十六进制颜色值的字段因字段而异。
谢谢!
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
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
此代码适用于希望避免调用 UDF(用户定义函数)的人。假设你的一个 sql 表 col. 包含如下 HTML 标记,您想删除 和 之间的所有<
内容>
。
[Remark] =" the HTML tags like: < div > < p >< span > We are trying to contact the company (Tel: < /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), ' '), ' ', '')))
WHERE [Remark] LIKE '%<%>%'
END
Step#3 : 从 Temp 表中选择您想要的结果
SELECT * FROM #t1
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