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

如何在SQL中将含多分隔符的字符串拆分至不同列?

如何在SQL中将含多分隔符的字符串拆分至不同列?

当然可以实现!这种带可变分隔符(有的带空格、有的不带)的字符串拆分需求在日常SQL处理里太常见了,我来给你一步步拆解怎么搞定~

核心思路

首先得把Customer_Group列里不统一的分隔符(-和-)转换成统一格式,比如把所有-(带空格的横杠)替换成-,这样后续拆分就不会因为空格干扰出错。然后用对应数据库的字符串拆分函数,提取出分隔符前后的内容,最后再用去空格函数清理掉多余的空格。

不同数据库的具体实现

下面针对几种常用的SQL引擎给出代码示例,你可以根据自己的数据库选择对应的写法:

1. MySQL 版本

MySQL的SUBSTRING_INDEX函数特别适合这种按分隔符提取内容的场景,写法非常简洁:

SELECT 
    Cust_ID,
    Customer_Group,
    -- 提取第一个分隔符前的Company
    LTRIM(RTRIM(SUBSTRING_INDEX(REPLACE(Customer_Group, ' - ', '-'), '-', 1))) AS Company,
    -- 提取第一个和第二个分隔符之间的City
    LTRIM(RTRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(Customer_Group, ' - ', '-'), '-', 2), '-', -1))) AS City,
    -- 提取第二个分隔符后的Country
    LTRIM(RTRIM(SUBSTRING_INDEX(REPLACE(Customer_Group, ' - ', '-'), '-', -1))) AS Country
FROM your_table_name;

2. PostgreSQL 版本

PostgreSQL的SPLIT_PART函数可以直接按索引提取拆分后的部分,搭配TRIM去空格很方便:

SELECT 
    Cust_ID,
    Customer_Group,
    TRIM(SPLIT_PART(REPLACE(Customer_Group, ' - ', '-'), '-', 1)) AS Company,
    TRIM(SPLIT_PART(REPLACE(Customer_Group, ' - ', '-'), '-', 2)) AS City,
    TRIM(SPLIT_PART(REPLACE(Customer_Group, ' - ', '-'), '-', 3)) AS Country
FROM your_table_name;

3. SQL Server 版本

SQL Server可以用CHARINDEX定位分隔符位置,再结合SUBSTRING提取内容:

SELECT 
    Cust_ID,
    Customer_Group,
    -- 提取Company
    LTRIM(RTRIM(LEFT(cleaned_group, CHARINDEX('-', cleaned_group) - 1))) AS Company,
    -- 提取City
    LTRIM(RTRIM(SUBSTRING(cleaned_group, CHARINDEX('-', cleaned_group) + 1, CHARINDEX('-', cleaned_group, CHARINDEX('-', cleaned_group) + 1) - CHARINDEX('-', cleaned_group) - 1))) AS City,
    -- 提取Country
    LTRIM(RTRIM(RIGHT(cleaned_group, LEN(cleaned_group) - CHARINDEX('-', cleaned_group, CHARINDEX('-', cleaned_group) + 1)))) AS Country
FROM (
    -- 先统一分隔符
    SELECT *, REPLACE(Customer_Group, ' - ', '-') AS cleaned_group
    FROM your_table_name
) AS temp;

直接更新表中字段

如果要把拆分后的结果直接写入Company、City、Country列,用UPDATE语句即可(记得执行前先备份数据,或者先用SELECT验证结果):
以MySQL为例:

UPDATE your_table_name
SET 
    Company = LTRIM(RTRIM(SUBSTRING_INDEX(REPLACE(Customer_Group, ' - ', '-'), '-', 1))),
    City = LTRIM(RTRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(Customer_Group, ' - ', '-'), '-', 2), '-', -1))),
    Country = LTRIM(RTRIM(SUBSTRING_INDEX(REPLACE(Customer_Group, ' - ', '-'), '-', -1)));

备注:内容来源于stack exchange,提问作者R Sem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 15:32:37