You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure SQL中批量删除字段内<>标签及中间内容的方法求助

在Azure SQL中批量移除字段内所有<与>之间的文本

问题分析

你当前的SQL语句只能移除第一个<和>之间的内容,因为CHARINDEX默认返回字符第一次出现的位置,无法处理嵌套或多个连续的标签结构,所以需要循环/递归处理直到所有标签都被清除。

解决方法

方法1:使用递归CTE处理批量数据

递归CTE可以反复执行替换操作,直到字段中不再包含<字符:

WITH RecursiveClean AS (
    -- 初始步骤:读取原始数据
    SELECT 
        [Comments] AS OriginalText,
        CASE 
            WHEN CHARINDEX('<', [Comments]) > 0 THEN 
                REPLACE([Comments], SUBSTRING([Comments], CHARINDEX('<', [Comments]), CHARINDEX('>', [Comments]) - CHARINDEX('<', [Comments]) + 1), '')
            ELSE [Comments]
        END AS CleanedText
    FROM YourTableName
    UNION ALL
    -- 递归步骤:持续清理剩余标签
    SELECT 
        rc.OriginalText,
        CASE 
            WHEN CHARINDEX('<', rc.CleanedText) > 0 THEN 
                REPLACE(rc.CleanedText, SUBSTRING(rc.CleanedText, CHARINDEX('<', rc.CleanedText), CHARINDEX('>', rc.CleanedText) - CHARINDEX('<', rc.CleanedText) + 1), '')
            ELSE rc.CleanedText
        END AS CleanedText
    FROM RecursiveClean rc
    WHERE CHARINDEX('<', rc.CleanedText) > 0
)
-- 提取最终清理完成的结果(每条原始记录保留最后一次递归的结果)
SELECT 
    OriginalText,
    CleanedText
FROM RecursiveClean
WHERE CHARINDEX('<', CleanedText) = 0
OPTION (MAXRECURSION 100); -- 根据文本复杂度调整递归次数,默认100,可设为0取消限制

方法2:创建自定义函数复用清理逻辑

如果需要多次使用该清理逻辑,可以创建自定义标量函数:

CREATE FUNCTION dbo.CleanHtmlTags(@InputText NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE @CleanedText NVARCHAR(MAX) = @InputText;
    -- 循环清理直到无标签残留
    WHILE CHARINDEX('<', @CleanedText) > 0
    BEGIN
        SET @CleanedText = REPLACE(@CleanedText, SUBSTRING(@CleanedText, CHARINDEX('<', @CleanedText), CHARINDEX('>', @CleanedText) - CHARINDEX('<', @CleanedText) + 1), '');
    END
    -- 可选:清理多余连续空格,优化结果格式
    SET @CleanedText = REPLACE(REPLACE(@CleanedText, '  ', ' '), '  ', ' ');
    RETURN @CleanedText;
END

调用函数查询:

SELECT 
    [Comments],
    dbo.CleanHtmlTags([Comments]) AS CleanedComments
FROM YourTableName;

补充说明

  • 递归CTE适合一次性批量处理数据,自定义函数更适合需要重复调用清理逻辑的场景
  • 两种方法都能处理嵌套标签(如<a><b>文本</b></a>),会逐层清理所有标签内容
  • 多余空格的清理逻辑可根据实际需求选择是否保留

内容的提问来源于stack exchange,提问作者venkatesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 07:25:20