繁体   English   中英

RegExp的SQL通配符替换列内容中的某些文本

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM