【问题标题】:PostgreSQL: output rows as list of comma-separated stringsPostgreSQL:将行输出为逗号分隔的字符串列表
【发布时间】:2020-03-24 03:18:23
【问题描述】:

在 PostgreSQL 11 上,我想将表的行输出为逗号分隔的字符串列表:

id,info,name,message

我尝试了以下查询:

SELECT array_to_string(array_agg(t), ',', '')                                                                                                                          
FROM (                                                                      
    SELECT id, info, name, message
    FROM myschema.mytable
) t;

但是这个输出:

(1,foo,bar,baz),(2,qux,zap,xen)

相比之下,期望的结果应该是这样的:

1,foo,bar,baz
2,qux,zap,xen

什么是正确的查询?

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    你似乎想要:

    SELECT id, CONCAT_WS(',', info, name, message)
    FROM myschema.mytable;
    

    不需要聚合。您想要的值都在一行中。

    当然,您可以在字符串中包含id,而不是作为单独的列:

    SELECT CONCAT_WS(',', id, info, name, message)
    FROM myschema.mytable;
    

    【讨论】:

      【解决方案2】:

      我可以用以下函数解决它:

      CREATE OR REPLACE FUNCTION myschema.get_foo()
      RETURNS SETOF text AS $$
      BEGIN
          RETURN QUERY
              SELECT COALESCE(array_to_string(array[id::text, info::text, name::text, message::text], ','), ''::text)
              FROM myschema.mytable;
      END;
      $$ LANGUAGE plpgsql;
      

      然后运行:

      SELECT * FROM myschema.get_foo();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多