我有一张桌子,像这样:
STREET | NUMBERS (varchar)
broadway | 01, 03
helmet | 01, 03, 07我想知道是否有可能获得这些数组,并创建一个新的表来分解它们,如下所示:
oid | STREET | NUMBERS
1 | broadway | 01
2 | broadway | 03
3 | helmet | 01
4 | helmet | 03
5 | helmet | 07通过搜索,我发现array_agg()做的恰恰相反。是否有某种反向array_agg()或任何其他方法来获得该结果?
另外,如果我还能用该行在原始数组中的位置获得另一列,那就太好了:
oid | STREET | NUMBERS | POSITION
1 | broadway | 01 | 1
2 | broadway | 03 | 2
3 | helmet | 01 | 1
4 | helmet | 03 | 2
5 | helmet | 07 | 3提前谢谢你
发布于 2019-01-09 22:55:32
在横向联接中使用string_to_array()和unnest() with ordinality:
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) https://stackoverflow.com/questions/54112495
复制相似问题