regexp_matches,每行数组
regexp_matches, array per row
在 PostgreSQL 中,我有一个 table 如下。
| id | mycolumn |
| -------- | -------------- |
| 1 | /1/2/8/ |
| 2 | /1/40/22/11/ |
| 3 | /1/15/35/ |
我正在尝试获取数组中每一行的所有数字。
到目前为止,我想出了以下内容:
SELECT array_agg(matchx)
FROM (
SELECT unnest(regexp_matches(mycolumn,
'[0-9]+',
'g')) matchx
FROM mytable
) x
我想要的:
| array_agg |
| ------------ |
| {1,2,8} |
| {1,40,22,11} |
| {1,15,35} |
我得到的:
| array_agg |
| ----------------------------- |
| {1,2,8,1,40,22,11,1,15,35} |
如何获取每行的数组?
不需要拆嵌,直接转成数组即可:
select id, string_to_array(trim(both '/' from mycolumn), '/')
from mytable;
trim()
是必需的,否则数组中的元素将是空的。
如果您在聚合的同时进行分组,您原来的方法会奏效:
SELECT id, array_agg(matchx)
FROM (
SELECT id,
unnest(regexp_matches(mycolumn,'[0-9]+','g')) matchx
FROM mytable
) x
group by id;
在 PostgreSQL 中,我有一个 table 如下。
| id | mycolumn |
| -------- | -------------- |
| 1 | /1/2/8/ |
| 2 | /1/40/22/11/ |
| 3 | /1/15/35/ |
我正在尝试获取数组中每一行的所有数字。 到目前为止,我想出了以下内容:
SELECT array_agg(matchx)
FROM (
SELECT unnest(regexp_matches(mycolumn,
'[0-9]+',
'g')) matchx
FROM mytable
) x
我想要的:
| array_agg |
| ------------ |
| {1,2,8} |
| {1,40,22,11} |
| {1,15,35} |
我得到的:
| array_agg |
| ----------------------------- |
| {1,2,8,1,40,22,11,1,15,35} |
如何获取每行的数组?
不需要拆嵌,直接转成数组即可:
select id, string_to_array(trim(both '/' from mycolumn), '/')
from mytable;
trim()
是必需的,否则数组中的元素将是空的。
如果您在聚合的同时进行分组,您原来的方法会奏效:
SELECT id, array_agg(matchx)
FROM (
SELECT id,
unnest(regexp_matches(mycolumn,'[0-9]+','g')) matchx
FROM mytable
) x
group by id;