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

如何使用SPLIT函数提取多组产品信息中的首项内容?

如何提取分号分隔字符串中每组的首个元素

单纯嵌套SPLIT函数没法直接实现需求,因为嵌套后会把所有逗号分割的元素扁平化,没法对应到原分号分隔的每组。但结合数组遍历/拆分函数,还是可以用SPLIT配合其他函数完成,下面按不同SQL方言给出具体实现:

MySQL 8.0+

方法1:JSON_TABLE + SUBSTRING_INDEX

先把原字符串转成JSON数组,拆分单行后提取每组首个元素,最后拼接:

SELECT GROUP_CONCAT(
           SUBSTRING_INDEX(item, ',', 1) SEPARATOR ','
       ) AS result
FROM (
    SELECT JSON_TABLE(
               CONCAT('["', REPLACE(your_column, ';', '","'), '"]'),
               '$[*]' COLUMNS(item VARCHAR(255) PATH '$')
           ) AS items
    FROM your_table
) AS sub;

方法2:递归CTE拆分

适合不想用JSON函数的场景:

WITH RECURSIVE split_cte AS (
    SELECT 
        1 AS idx,
        SUBSTRING_INDEX(your_column, ';', 1) AS item,
        SUBSTRING(your_column, LENGTH(SUBSTRING_INDEX(your_column, ';', 1)) + 2) AS rest
    FROM your_table
    UNION ALL
    SELECT 
        idx + 1,
        SUBSTRING_INDEX(rest, ';', 1),
        SUBSTRING(rest, LENGTH(SUBSTRING_INDEX(rest, ';', 1)) + 2)
    FROM split_cte
    WHERE rest != ''
)
SELECT GROUP_CONCAT(SUBSTRING_INDEX(item, ',', 1) SEPARATOR ',') AS result
FROM split_cte;

PostgreSQL

用STRING_TO_ARRAY拆分数组,UNNEST展开后提取首个元素:

SELECT STRING_AGG(SPLIT_PART(item, ',', 1), ',' ) AS result
FROM your_table,
     UNNEST(STRING_TO_ARRAY(your_column, ';')) AS item;

也可以用正则匹配提取每组首个部分:

SELECT STRING_AGG(SUBSTRING(item FROM '^[^,]*'), ',' ) AS result
FROM your_table,
     UNNEST(STRING_TO_ARRAY(your_column, ';')) AS item;

BigQuery

拆分数组后遍历每个元素提取首个部分,再拼接成字符串:

SELECT ARRAY_TO_STRING(
           ARRAY(SELECT SPLIT_PART(x, ',', 1) FROM UNNEST(SPLIT(your_column, ';')) x),
           ','
       ) AS result
FROM your_table;

为什么你之前的写法失败?

SPLIT(SPLIT(your_column,';'),',')会把分号拆分后的每个子字符串再按逗号拆分,最终得到一个扁平化的数组(比如示例中会变成["A","1","B","2","C3","D","4"]),无法对应原分号分隔的每组,自然取不到每组的首个元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:30:15