首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgres -从数组到多行

Postgres -从数组到多行
EN

Stack Overflow用户
提问于 2019-01-09 22:36:40
回答 1查看 221关注 0票数 0

我有一张桌子,像这样:

代码语言:javascript
复制
STREET     | NUMBERS (varchar)
broadway   | 01, 03
helmet     | 01, 03, 07

我想知道是否有可能获得这些数组,并创建一个新的表来分解它们,如下所示:

代码语言:javascript
复制
oid | STREET     | NUMBERS
1   | broadway   | 01
2   | broadway   | 03
3   | helmet     | 01
4   | helmet     | 03
5   | helmet     | 07

通过搜索,我发现array_agg()做的恰恰相反。是否有某种反向array_agg()或任何其他方法来获得该结果?

另外,如果我还能用该行在原始数组中的位置获得另一列,那就太好了:

代码语言:javascript
复制
oid | STREET     | NUMBERS | POSITION
1   | broadway   | 01      | 1
2   | broadway   | 03      | 2
3   | helmet     | 01      | 1
4   | helmet     | 03      | 2
5   | helmet     | 07      | 3

提前谢谢你

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-09 22:55:32

在横向联接中使用string_to_array()unnest() with ordinality

代码语言:javascript
复制
with my_table(street, numbers) as (
values
    ('broadway', '01, 03'),
    ('helmet', '01, 03, 07')
)

select street, number, position
from my_table
cross join unnest(string_to_array(numbers, ', ')) with ordinality as u(number, position)

  street  | number | position 
----------+--------+----------
 broadway | 01     |        1
 broadway | 03     |        2
 helmet   | 01     |        1
 helmet   | 03     |        2
 helmet   | 07     |        3
(5 rows)    
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54112495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档