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

如何在AWS Redshift SQL中将空格/逗号分隔值拆分为多行?

Redshift SQL实现按空格/逗号拆分列值为多行

要实现将col2中以空格或逗号分隔的字符串拆分为单独行,同时保留col1和col3的对应值,你可以用以下两种方法:

方法一:递归CTE(灵活适配任意数量的元素)

这种方法不需要提前预估col2中最多有多少个元素,能自动处理所有拆分场景:

WITH recursive split_data AS (
    -- 初始步骤:统一分隔符(空格换逗号),提取第一个元素和剩余字符串
    SELECT
        col1,
        col3,
        split_part(replace(col2, ' ', ','), ',', 1) AS split_col2,
        substr(replace(col2, ' ', ','), length(split_part(replace(col2, ' ', ','), ',', 1)) + 2) AS remaining_str
    FROM your_table
    WHERE col2 IS NOT NULL AND col2 != ''
    
    UNION ALL
    
    -- 递归步骤:持续拆分剩余字符串,直到无内容可拆
    SELECT
        col1,
        col3,
        split_part(remaining_str, ',', 1) AS split_col2,
        substr(remaining_str, length(split_part(remaining_str, ',', 1)) + 2) AS remaining_str
    FROM split_data
    WHERE remaining_str IS NOT NULL AND remaining_str != ''
)
-- 最终结果:过滤空值,整理列名并排序
SELECT
    col1,
    split_col2 AS col2,
    col3
FROM split_data
WHERE split_col2 IS NOT NULL AND split_col2 != ''
ORDER BY col1, col2;

方法二:Generate Series + Split_Part(简洁高效,需预估最大元素数)

如果能确定col2中最多包含的元素数量(比如示例中最多5个),可以用这种更简洁的方式:

WITH nums AS (
    -- 生成1到最大元素数的序列,这里设为10,可根据实际情况调整
    SELECT generate_series(1, 10) AS n
)
SELECT
    t.col1,
    split_part(replace(t.col2, ' ', ','), ',', n.n) AS col2,
    t.col3
FROM your_table t
CROSS JOIN nums n
-- 过滤掉空的拆分结果
WHERE split_part(replace(t.col2, ' ', ','), ',', n.n) IS NOT NULL 
  AND split_part(replace(t.col2, ' ', ','), ',', n.n) != ''
ORDER BY t.col1, col2;

核心逻辑说明

两种方法都先通过replace(col2, ' ', ',')把空格统一替换成逗号,消除不同分隔符的差异,再用拆分函数提取单个元素,最后关联原始行的其他列得到目标结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:17:17