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

如何在SQL查询中按逗号分隔提取自定义字符串片段?

解决方案

核心思路

先统一清理字符串(移除首尾的方括号),再针对清理后的字符串按逗号规则提取内容,这样不管原字符串带不带方括号,都能统一处理:

  • 清理字符串:判断字符串首尾是否为[和],是则截取中间内容,否则保留原字符串
  • 提取规则:
    1. 无逗号:直接返回清理后的字符串
    2. 含单个逗号:返回第一个逗号后的内容
    3. 含多个逗号:返回第一个逗号后、第二个逗号前的内容

完整SQL代码

SELECT 
    LTRIM(RTRIM(
        CASE
            -- 无逗号,直接返回清理后的字符串
            WHEN CHARINDEX(',', cleaned_str) = 0 THEN cleaned_str
            -- 存在逗号,判断是否有第二个逗号
            ELSE
                CASE
                    -- 有第二个逗号,提取中间部分
                    WHEN CHARINDEX(',', cleaned_str, CHARINDEX(',', cleaned_str) + 1) > 0
                    THEN SUBSTRING(cleaned_str, CHARINDEX(',', cleaned_str) + 1, 
                                   CHARINDEX(',', cleaned_str, CHARINDEX(',', cleaned_str) + 1) - CHARINDEX(',', cleaned_str) - 1)
                    -- 只有一个逗号,提取逗号后的所有内容
                    ELSE SUBSTRING(cleaned_str, CHARINDEX(',', cleaned_str) + 1, LEN(cleaned_str))
                END
        END
    )) AS 期望输出
FROM (
    -- 第一步:清理首尾方括号
    SELECT 
        LTRIM(RTRIM(
            CASE 
                WHEN LEFT(multi_string, 1) = '[' AND RIGHT(multi_string, 1) = ']'
                THEN SUBSTRING(multi_string, 2, LEN(multi_string) - 2)
                ELSE multi_string
            END
        )) AS cleaned_str
    FROM dbo.[multi_string_db]
) AS temp_table

代码说明

  1. 清理方括号:通过子查询先处理所有字符串,移除首尾的[和],同时用LTRIM/RTRIM去除多余空格
  2. 逗号规则处理:
    • 用CHARINDEX判断逗号的存在及位置
    • 针对不同逗号数量,分别截取对应的内容,确保带/不带方括号的字符串都能正确处理
  3. 兼容场景:既支持原测试数据中的带方括号数组,也能处理不带方括号的多逗号字符串(如'Some time required, Received documents - Unchecked, Misc'),返回Received documents - Unchecked

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 08:10:17