0

我的存储过程中有一个数字的 VARCHAR,这些数字被组织为数组,我将在下面展示一个示例:

{1,2,3,4,5,6,7,8,9},{1,2,3,4,5},{1,2,3},{9} -- This is a STRING

我想做一个FOR循环来每次从这个集合中选择一个子字符串,{}并将其转换为一个整数数组。

所以第一次在我的循环中我会有:

{1,2,3,4,5,6,7,8,9}

所以我将使用它array_to_string来将其转换为integer[]

第二次我将拥有:

{1,2,3,4,5}

并继续使用array_to_string

有小费吗?小心,因为不幸的是我使用的是 PostgreSQL 8.3!

4

1 回答 1

1

可以在一个语句中做到这一点:

SELECT string_to_array(unnest(string_to_array(
          trim('{1,2,3,4,5,6,7,8,9},{1,2,3,4,5},{1,2,3},{9}', '{}')
          , '},{')), ',')::int[]

.. 在 Postgres 8.4 或更高版本中。8.3 已达到 EOL。紧急考虑升级。

但是,regexp_split_to_table()8.3 中已经有:

SELECT string_to_array(regexp_split_to_table(
          trim('{1,2,3,4,5,6,7,8,9},{1,2,3,4,5},{1,2,3},{9}', '{}')
          , '},{'), ',')::int[]

-> Postgres 8.3 的 SQLfiddle 演示

对于循环数组,请考虑以下相关答案:
Postgres - array for loop

于 2013-12-09T18:32:37.460 回答