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

如何在Redshift中使用SPLIT_PART将整列按单词拆分?

Redshift 拆分字符串为多行的正确方法

你的split_part语句无法实现需求,因为这个函数只能提取拆分后的指定位置的单个元素,不能将所有拆分结果展开成多行。要实现按空格拆分每个单词并单独占一行,可以用以下两种方法:

方法一:使用STRING_TO_ARRAY + UNNEST(推荐,适合Redshift 1.0.2368及以上版本)

Redshift较新版本支持UNNEST函数,可以将数组的每个元素展开为单独的行,配合STRING_TO_ARRAY先把字符串转成数组:

SELECT 
    t.name,
    unnest(string_to_array(t.answer, ' ')) AS split_answer
FROM your_table t

如果你的数据里存在连续空格,会产生空的拆分结果,可以加上过滤条件去除空值:

SELECT 
    t.name,
    word AS split_answer
FROM your_table t,
unnest(string_to_array(t.answer, ' ')) AS word
WHERE word IS NOT NULL AND word != ''

方法二:递归CTE(兼容旧版本Redshift)

如果你的Redshift版本不支持UNNEST,可以用递归公共表表达式(CTE)逐行拆分字符串:

WITH RECURSIVE split_words AS (
    -- 初始步骤:提取第一个单词和剩余字符串
    SELECT 
        name,
        split_part(answer, ' ', 1) AS split_answer,
        TRIM(SUBSTR(answer, LENGTH(split_part(answer, ' ', 1)) + 1)) AS remaining
    FROM your_table
    WHERE answer IS NOT NULL AND answer != ''
    
    UNION ALL
    
    -- 递归步骤:继续拆分剩余字符串
    SELECT 
        name,
        split_part(remaining, ' ', 1) AS split_answer,
        TRIM(SUBSTR(remaining, LENGTH(split_part(remaining, ' ', 1)) + 1)) AS remaining
    FROM split_words
    WHERE remaining IS NOT NULL AND remaining != ''
)
SELECT name, split_answer
FROM split_words
WHERE split_answer IS NOT NULL AND split_answer != ''
ORDER BY name;

注意:将代码中的your_table替换为你的实际表名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:05:18