Postgresql - concat_ws like function?

pu3pd22g  于 12个月前  发布在  PostgreSQL
关注(0)|答案(6)|浏览(114)

我第一次有了使用postgresql的痛苦经历,现在的挑战是:
如何在postgresql中执行concat_ws,将多个字段值从一个组中连接起来:

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

字符串

58wvjzkj

58wvjzkj1#

对于PostgreSQL 8.4及以上版本:

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

字符串

zazmityj

zazmityj2#

Postgres9.0为作业添加了聚合函数string_agg()

SELECT string_agg(field1, ';') FROM tbl GROUP BY id;

字符串
第二个参数是分隔符(类似于其他聚合函数)。
请参阅:

  • 将一列的多个结果行连接为一列,按另一列分组

字符串函数**concat_ws()**(Postgres 9.1+)的作用与MySQL的concat_ws()相同-当不被滥用为聚合函数时。它在处理空值时特别有用:

SELECT concat_ws(';', field1, field2, field3) FROM tbl


您甚至可以合并来聚合多个列:

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

92dk7w1h

92dk7w1h3#

如果没有array_agg(8.4之前),您可以用途:

SELECT array_to_string(
    ARRAY(SELECT field_lambda FROM table_lambda GROUP BY id), ';'
);

字符串

4smxwvx5

4smxwvx54#

根据PostgreSQL wiki,你可以模拟PostgreSQL 8.4 array_agg函数来接近你所需要的。

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

字符串

lnlaulya

lnlaulya5#

这适用于;标签数据必须显示资产有几个,也就是说,对于资产6,它有2个标签,显示它们1,2是表:
电话:+86-021 - 8888888
电话:+86-0511 - 8888888传真:+86-0511 - 8888888
SELECT asset_tag.asset_id,asset_tag.tag_id,concat_ws(',',asset_tag.tag_id,asset_tag.tag_id)AS etiqueta
FROM public.asset_tag
--JOIN PUBLIC.imagen ON asset_tag.asset_id = imagen.asset_id
--WHERE imagen.asset_id = asset_tag.asset_id
GROUP BY asset_tag.asset_id,asset_tag.tag_id ;

iih3973s

iih3973s6#

如果你想支持多个列的使用,这个方法将不能处理多个列(就像concat_ws一样)

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

字符串

相关问题