Postgresql-concat_ws-like函数?
我对postgresql有了第一次痛苦的体验,现在最重要的挑战是: 如何在postgresql中执行连接,通过以下方式连接组中的多个字段值: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;
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.4array\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()
。见下文。