【问题标题】:Select substring from a varchar and convert to Integer array从 varchar 中选择子字符串并转换为整数数组
【发布时间】:2013-12-26 23:42:16
【问题描述】:

我的存储过程中有一个数字的 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!

【问题讨论】:

    标签: sql arrays postgresql plpgsql postgresql-8.3


    【解决方案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 has reached EOL. 紧急考虑升级。

    但是,8.3 中已经有regexp_split_to_table()

    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[]
    

    -> SQLfiddle demo for Postgres 8.3.

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

    【讨论】:

    • 您的解决方案非常优雅!但在那之后,我需要迭代每个数组中的每个元素以将该数字传递给另一个过程,就像在第一个数组中一样,我将调用我的 proc 9 次:my_proc(1); my_proc(2); my_proc(3);继续前进……
    • @ricardocaldeira:转换数据后您仍然可以这样做。我想一个嵌套的for循环。我添加了一个用于在现代和古代 Postgres 中循环数组的链接 ..
    • 伙计,我正在尝试,但我不知道如何得到这个......如果你能帮助我,请回复另一个问题stackoverflow.com/questions/20480035/…
    猜你喜欢
    • 1970-01-01
    • 2015-07-04
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 2018-04-18
    • 2017-07-30
    相关资源
    最近更新 更多