You need to enable JavaScript to run this app. 如何基于指定列的分隔多值将单条数据拆分为多条记录
优惠活动
大模型
产品
解决方案
定价
更多

如何基于指定列的分隔多值将单条数据拆分为多条记录

按列值拆分单条记录为多行的实现方案

核心逻辑很直接:把要拆分的字段按指定分隔符(这里是;)拆成独立的值集,再把原记录的其他固定字段值匹配到每一个拆分出的值上,就能得到预期的输出效果,所有常用数据库、数仓引擎都能实现,下面是几个高频场景的具体写法:

  • Hive / Spark SQL(数仓场景最常用)
    直接用内置函数就能完成,不需要额外写自定义逻辑:
SELECT
    REC_KEY,
    SURR_KEY,
    REC_YR,
    MANUFACTURER,
    MODEL_NAME,
    -- 拆分后去掉前后冗余空格,避免脏数据
    TRIM(eng_item) AS ENG_POWER
FROM 你的原表
-- 先把ENG_POWER按分号拆成数组,再用explode把数组每个元素转成独立行
LATERAL VIEW EXPLODE(SPLIT(ENG_POWER, ';')) tmp_split AS eng_item
  • PostgreSQL
    靠数组展开函数实现拆分:
SELECT
    REC_KEY,
    SURR_KEY,
    REC_YR,
    MANUFACTURER,
    MODEL_NAME,
    TRIM(eng_item) AS ENG_POWER
FROM 你的原表,
-- 把分号分隔的字符串转成数组,再展开成多行
UNNEST(STRING_TO_ARRAY(ENG_POWER, ';')) AS eng_item
  • MySQL 8.0 及以上版本
    用内置的JSON_TABLE函数实现,不需要写自定义存储过程:
SELECT
    t.REC_KEY,
    t.SURR_KEY,
    t.REC_YR,
    t.MANUFACTURER,
    t.MODEL_NAME,
    TRIM(j.eng_item) AS ENG_POWER
FROM 你的原表 t
JOIN JSON_TABLE(
    -- 把分号拼接的字符串转成标准JSON数组格式供后续展开
    CONCAT('["', REPLACE(t.ENG_POWER, ';', '","'), '"]'),
    '$[*]' COLUMNS(eng_item VARCHAR(100) PATH '$')
) j

实操注意点

  • 拆分前建议加非空过滤,避免原字段为NULL或空字符串时,拆出无意义的空行
  • 如果字段内分隔符不统一(比如混有半角分号、全角分号),拆分前可以先做统一字符替换,保证拆分准确
  • 拆分出的字段长度要和实际值长度匹配,避免出现值截断问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 19:54:05