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

SQL实现将单列中分号分隔的拼接字符串拆分为3个独立列

SQL拆分分号分隔字符串为固定3列方案

不同数据库方言的内置字符串函数存在差异,以下给出主流数据库的可直接运行实现:

MySQL

使用SUBSTRING_INDEX搭配分隔符计数判断实现,避免短字符串重复取值问题:

SELECT 
    待拆分列名,
    SUBSTRING_INDEX(SUBSTRING_INDEX(待拆分列名, ';', 1), ';', -1) AS col1,
    CASE WHEN LENGTH(待拆分列名) - LENGTH(REPLACE(待拆分列名, ';', '')) >= 1 
         THEN SUBSTRING_INDEX(SUBSTRING_INDEX(待拆分列名, ';', 2), ';', -1) 
         ELSE NULL END AS col2,
    CASE WHEN LENGTH(待拆分列名) - LENGTH(REPLACE(待拆分列名, ';', '')) >= 2 
         THEN SUBSTRING_INDEX(SUBSTRING_INDEX(待拆分列名, ';', 3), ';', -1) 
         ELSE NULL END AS col3
FROM 表名;

PostgreSQL

直接使用内置数组函数实现,不存在的下标自动返回NULL:

SELECT 
    待拆分列名,
    (string_to_array(待拆分列名, ';'))[1] AS col1,
    (string_to_array(待拆分列名, ';'))[2] AS col2,
    (string_to_array(待拆分列名, ';'))[3] AS col3
FROM 表名;

SQL Server

通过转JSON数组取值实现,兼容2016及以上支持JSON函数的版本:

SELECT 
    待拆分列名,
    JSON_VALUE('["' + REPLACE(待拆分列名, ';', '","') + '"]', '$[0]') AS col1,
    JSON_VALUE('["' + REPLACE(待拆分列名, ';', '","') + '"]', '$[1]') AS col2,
    JSON_VALUE('["' + REPLACE(待拆分列名, ';', '","') + '"]', '$[2]') AS col3
FROM 表名;

Oracle

使用正则匹配函数直接提取对应位置的取值:

SELECT 
    待拆分列名,
    REGEXP_SUBSTR(待拆分列名, '[^;]+', 1, 1) AS col1,
    REGEXP_SUBSTR(待拆分列名, '[^;]+', 1, 2) AS col2,
    REGEXP_SUBSTR(待拆分列名, '[^;]+', 1, 3) AS col3
FROM 表名;

如果需要持久化存储拆分结果,可先执行ALTER TABLE语句新增3个目标列,再用上述逻辑执行UPDATE赋值即可;如果仅需查询使用,也可以基于上述逻辑创建视图简化后续调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 12:03:03