用逗号分隔数据并存储到它们自己的列中

时间:2018-05-08 20:04:20

标签: sql amazon-redshift

现在,我有一堆数据存储在一个字段中,它是用逗号分隔的一系列数字:

ID      Values 

235077  8185,8186,8187,8188,8189,8190,8191,9241,9244,9245,1,2,3,4,5,9
246576  1,2,3,4,5,9
114507  1,2,3,4,5,6,9
256493  8166,8167,8168,8169,8170,8171,8172,20198,20201,20202,20204,20205,20207,20209,1,2,3,4,5,9
256518  1,2,3,4,5,6,9
234587  1,2,3,4,5,9
256513  1,2,3,4,5,9
242822  8166,8167,8168,8169,8170,8171,8172,20198,20201,20202,20204,20205,20207,20209,1,2,3,4,5,9
256510  1,2,3,4,5,9
183173  1,2,3,4,5,9
256463  8185,8186,8187,8188,8189,8190,8191,9241,9244,9245,1,2,3,4,5,9
255102  1,2,3,4,5,9
253850  1559,1560,1561,1562,2728,1,2,3,4,5,9
240286  9239,9242,1,2,3,4,5,8
64154   1,2,3,4,5,9
232844  1,2,3,4,5,9
246571  4317,1,2,3,4,5,9

我想要做的是以这样一种方式操纵数据:我不仅可以将值分开,而且将它们全部拉到与其ID对应的一列中。所以以64154为例:

ID     Values
65414     1
65414     2
65414     3
65414     4
65414     5
65414     9

我确定这会涉及某种Regex功能,但就上述方式级联数据而言,我输了。

2 个答案:

答案 0 :(得分:0)

注意:当我回答时,这个问题被贴上了Postgres。

在Postgres中,这很容易。您可以使用横向连接:

select t.id, r.val
from t, lateral
     regexp_split_to_table(v.x, ',' ) r(val);

我认为Redshift不具备此功能。

答案 1 :(得分:0)

只需使用UNNEST()函数即可。这是PostgreSQL中的一个内置函数,它允许将数组爆炸成每个数组元素的行,如下所示:

SELECT
id
, UNNEST(values)
FROM a_table

这消除了进行横向连接等的需要。