TSQL-替换或删除两个不同字符串之间的字符串,在整个列的字段中多次

TSQL-替换或删除两个不同字符串之间的字符串,在整个列的字段中多次,sql,sql-server,tsql,Sql,Sql Server,Tsql,我想替换或删除这两个字符之间的所有字符,包括这两个字符它们在整个字段中多次出现,每行的情况也各不相同 我相信要替换的字符串是html,所以当我试图发布一个示例时,站点只是将其注册为格式化 我使用replace删除了所有常用字符串,比如换行符的html,但有些字符串使用十六进制颜色值在字段之间变化 谢谢 此代码适用于希望避免调用UDF用户定义函数的用户。 CREATE TABLE #html(Value NVARCHAR(MAX)) INSERT INTO #html(Value) VALUES(

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

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

我使用replace删除了所有常用字符串,比如换行符的html,但有些字符串使用十六进制颜色值在字段之间变化


谢谢

此代码适用于希望避免调用UDF用户定义函数的用户。
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
假设您的一个sql表列包含如下所示的HTML标记,并且您希望删除它们之间的所有内容。 [备注]=HTML标签,如:
我们正试图联系公司电话:
等'

步骤1:将结果集存储到临时表中

select .... into #t1 from....where...blah blah 
SELECT * FROM #t1 
步骤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

看这个:这很好,但它只会在第一个实例中这样做。OP需要这样做,因为他们在整个领域内多次出现,这是正确的答案。我测试了它,它工作得很好!
select [dbo].[udf_RemoveHtmlTag]([column_name]) from tablename 
select .... into #t1 from....where...blah blah 
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
SELECT * FROM #t1