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

如何解决STRING_SPLIT拆分多余逗号干扰及自定义分隔符问题?

解决STRING_SPLIT拆分含内部逗号字符串及多字符分隔符问题

关于多字符分隔符的问题

STRING_SPLIT 仅支持单个字符作为分隔符,无法直接传入“1. ”“2. ”这类多字符格式的分隔符。如果需要基于这类模式拆分,必须通过其他字符串处理方法实现。

解决项内含逗号的拆分问题

你的字符串结构是每个有效项以“数字. ”开头,所以应该基于这个固定模式拆分,而不是用逗号。以下提供两种可行方案:

方案1:递归CTE(兼容SQL Server 2012及以上)

DECLARE @input NVARCHAR(MAX) = '1. Archiviazione, 2. Conservazione in archivi, ad accesso selezionato, 3. Conservazione in contenitori muniti di serratura, 4. Controllo degli accessi fisici, 5. Controllo degli accessi logici, 6. Custodia atti e documenti, 7. Formazione degli incaricati, 8. Sicurezza dei siti web';

WITH SplitCTE AS (
    -- 初始化提取第一个项
    SELECT 
        1 AS ItemNumber,
        SUBSTRING(@input, 1, PATINDEX('% [0-9]. %', @input + ' 9. ') - 1) AS Item,
        PATINDEX('% [0-9]. %', @input + ' 9. ') + 1 AS NextStartPos
    WHERE @input IS NOT NULL AND @input <> ''
    
    UNION ALL
    
    -- 递归提取后续项
    SELECT 
        ItemNumber + 1,
        SUBSTRING(@input, NextStartPos, PATINDEX('% [0-9]. %', SUBSTRING(@input, NextStartPos, LEN(@input)) + ' 9. ') - 1),
        NextStartPos + PATINDEX('% [0-9]. %', SUBSTRING(@input, NextStartPos, LEN(@input)) + ' 9. ')
    FROM SplitCTE
    WHERE NextStartPos <= LEN(@input)
)
SELECT ItemNumber, TRIM(Item) AS Item
FROM SplitCTE;

方案2:OPENJSON结合正则替换(SQL Server 2017及以上)

利用REGEXP_REPLACE识别“数字. ”模式,将字符串转换为JSON数组后拆分:

DECLARE @input NVARCHAR(MAX) = '1. Archiviazione, 2. Conservazione in archivi, ad accesso selezionato, 3. Conservazione in contenitori muniti di serratura, 4. Controllo degli accessi fisici, 5. Controllo degli accessi logici, 6. Custodia atti e documenti, 7. Formazione degli incaricati, 8. Sicurezza dei siti web';

-- 转换为JSON数组格式
DECLARE @json NVARCHAR(MAX) = '["' + REGEXP_REPLACE(@input, '\s*([0-9]+)\. ', '","') + '"]';
-- 修正开头多余的逗号
SET @json = STUFF(@json, 1, 2, '');

SELECT 
    ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS ItemNumber,
    TRIM(value) AS Item
FROM OPENJSON(@json);

这两种方案都会按“数字. ”划分的完整项拆分,不会因为项内部的逗号导致拆分错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:20:27