如何在postgresql中循环字符串[]?

Posted

技术标签:

【中文标题】如何在postgresql中循环字符串[]?【英文标题】:How to loop through string[] in postgresql? 【发布时间】:2017-01-21 07:03:22 【问题描述】:

在这个 postgressql 函数中,我通过拆分字符串创建了一个数组。现在我想在这个数组上循环并对其进行一些处理。

功能:

CREATE OR REPLACE FUNCTION getAllFoo() RETURNS character varying as
$BODY$
DECLARE
   arr_split_data text[];
   counter character varying;
begin

    counter := ''; -- Init value

    -- split data. Add in array
    select into arr_split_data regexp_split_to_array('a,b,c,d,e,f',',');

    FOR r IN arr_split_data -- error
    LOOP
         counter := arr_split_data[r] || '_' || counter; -- do some processing
    END LOOP;

  return counter;
END
$BODY$
LANGUAGE 'plpgsql';

但是我收到了这个错误

当我执行这个函数时。我的 for 循环语法错了吗?

【问题讨论】:

【参考方案1】:

语法是

FOREACH r IN ARRAY arr_split_data
LOOP
  counter := r || '_' || counter;
  -- do some processing
END LOOP;

您还需要声明r

DECLARE
    arr_split_data TEXT [];
    r              CHARACTER VARYING;
    counter        CHARACTER VARYING;
BEGIN

参见手册第 41.6.5 节:Looping Through Arrays

【讨论】:

不工作。错误 - FOREACH 的循环变量必须是已知变量或变量列表 @Deepakgupta: 然后声明变量r【参考方案2】:
    CREATE OR REPLACE FUNCTION getAllFoo() RETURNS character varying as
    $BODY$
    DECLARE
        r               character varying;    
        arr_split_data  text[];
        counter         character varying;
    begin
        counter := ''; -- Init value

        -- split data. Add in array
        select into arr_split_data regexp_split_to_array('a,b,c,d,e,f',',');

        FOREACH r IN array arr_split_data LOOP
            counter := counter || '_' || r; -- do some processing
        END LOOP;
        return counter;

    END
    $BODY$
    LANGUAGE 'plpgsql';

【讨论】:

以上是关于如何在postgresql中循环字符串[]?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 sql - postgresql 中找到不匹配的行?

delphi中pos函数怎么用?

eclipse如何连接postgreSQL??

使用 unicode 的 Postgresql instr

如何在 PostgreSQL 中克隆一条记录

如何从 postgresql 10.3 中的这个多重连接查询中删除嵌套循环