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;