Postgresql-concat_ws-like函数?

Postgresql-concat_ws-like函数?,postgresql,Postgresql,我对postgresql有了第一次痛苦的体验,现在最重要的挑战是: 如何在postgresql中执行连接,通过以下方式连接组中的多个字段值: select concat_ws(';',field_lambda) from table_lambda group by id; 对于PostgreSQL 8.4及以上版本: select ARRAY_TO_STRING( ARRAY_AGG(field_lambda),';' ) from table_lambda group by id;

我对postgresql有了第一次痛苦的体验,现在最重要的挑战是:

如何在postgresql中执行连接,通过以下方式连接组中的多个字段值:

select concat_ws(';',field_lambda) from table_lambda group by id;

对于PostgreSQL 8.4及以上版本:

select ARRAY_TO_STRING(
    ARRAY_AGG(field_lambda),';'
) from table_lambda group by id;

如果没有
数组\u agg
(8.4之前),您可以使用:

SELECT array_to_string(
    ARRAY(SELECT field_lambda FROM table_lambda GROUP BY id), ';'
);
根据,您可以模拟PostgreSQL 8.4
array\u agg
函数,以接近您所需的功能

CREATE AGGREGATE array_agg(anyelement) (
    SFUNC=array_append,
    STYPE=anyarray,
    INITCOND='{}'
);

自从PostgreSQL9.0(2010年9月发布)以来,就有了聚合函数 要做你似乎想做的事:

SELECT string_agg(field1, ';') FROM tbl GROUP BY id;
请注意,第二个参数是分隔符(类似于其他聚合函数)

自PostgreSQL9.1以来,还有一个字符串函数,它在其他方面与MySQL的
concat_ws()
(在没有被滥用为聚合函数时)做的相同。处理
NULL
值尤其有用

SELECT concat_ws(';', field1, field2, field3) FROM tbl
您甚至可以将两者结合起来,以任意方式聚合多个列

SELECT id, string_agg(concat_ws(',', field1, field2, field3), ';') AS fields
FROM   tbl
GROUP  BY id;

如果您希望支持多个列的使用,那么这个方法将无法处理多个列(就像concat_ws一样)

ARRAY_TO_STRING(ARRAY[$columns_string], 'my_delimiter').

仅供参考,concat_ws将出现在PostgreSQL 9.1中:。。但在Postgres中,
concat_ws()
不是聚合函数。改用
string\u agg()
。见下文。