TSQL-替换或删除两个不同字符串之间的字符串,在整个列的字段中多次
我想替换或删除这两个字符之间的所有字符,包括这两个字符<>它们在整个字段中多次出现,每行的情况也各不相同 我相信要替换的字符串是html,所以当我试图发布一个示例时,站点只是将其注册为格式化 我使用replace删除了所有常用字符串,比如换行符的html,但有些字符串使用十六进制颜色值在字段之间变化TSQL-替换或删除两个不同字符串之间的字符串,在整个列的字段中多次,sql,sql-server,tsql,Sql,Sql Server,Tsql,我想替换或删除这两个字符之间的所有字符,包括这两个字符它们在整个字段中多次出现,每行的情况也各不相同 我相信要替换的字符串是html,所以当我试图发布一个示例时,站点只是将其注册为格式化 我使用replace删除了所有常用字符串,比如换行符的html,但有些字符串使用十六进制颜色值在字段之间变化 谢谢 此代码适用于希望避免调用UDF用户定义函数的用户。 CREATE TABLE #html(Value NVARCHAR(MAX)) INSERT INTO #html(Value) VALUES(
谢谢 此代码适用于希望避免调用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:将结果集存储到临时表中
看这个:这很好,但它只会在第一个实例中这样做。OP需要这样做,因为他们在整个领域内多次出现,这是正确的答案。我测试了它,它工作得很好!
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), ' '), ' ', '')))
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), ' '), ' ', '')))
WHERE [Remark] LIKE '%<%>%'
END
SELECT * FROM #t1