[英]SQL Wildcards to RegExp replace certain text in a column content
我有一张表,其中一列的文本与HTML数据混合在一起。 这是由于脚本中的错误(已修复)引起的,但是需要对SQL数据进行编辑以反映更改。 该列的类型为nvarchar(max, null)
。 我需要做的就是找到诸如<a img="lkss">
, <div attr=val>
标记,并将其替换为空字符串""
。 我调查了一下 ,但是解决方案说明了如何基于一种模式替换整个内容。 我的问题是我需要部分替换内容,但要保留干净的文本(即不是HTML标记/属性)。 任何建议/帮助表示赞赏。
测试列数据:
<div attr=val; color=somecolor>inside text<div some=val><a some=val>Inside anchor
预期结果:
inside textInside anchor
我使用这样的CTE:
DECLARE @str nvarchar(max) = '<div attr=val; color=somecolor>inside text<div some=val><a some=val>Inside anchor';
WITH CTE(myStr) AS (
SELECT @str
UNION ALL
SELECT REPLACE(mystr, SUBSTRING(myStr, CHARINDEX('<', myStr, 1), CHARINDEX('>', myStr, 1) - CHARINDEX('<', myStr, 1) + 1), '')
FROM CTE
WHERE PATINDEX('%<%>%',myStr) > 0
)
SELECT myStr
FROM CTE
WHERE PATINDEX('%<%>%',myStr) = 0
我建议您像这样在SVF中使用它:
CREATE FUNCTION tagRemover
(
@str nvarchar(max)
)
RETURNS nvarchar(max)
AS
BEGIN
DECLARE @ResultVar nvarchar(max);
SELECT @ResultVar = @str;
;WITH CTE(myStr, id) AS (
SELECT @str, 1
UNION ALL
SELECT REPLACE(mystr, SUBSTRING(myStr, CHARINDEX('<', myStr, 1), CHARINDEX('>', myStr, 1) - CHARINDEX('<', myStr, 1) + 1), ''), id + 1
FROM CTE
WHERE PATINDEX('%<%>%',myStr) > 0
)
SELECT @ResultVar = myStr
FROM CTE
WHERE PATINDEX('%<%>%',myStr) = 0;
RETURN @ResultVar;
END
GO
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.