簡體   English   中英

Postgresql中如何將多個String Array列組合成一個String Array

[英]How to combine several String Array columns into one String Array in Postgresql

假設我有一個包含以下兩列的表:

create table contacts (
    first_name varchar[],
    last_name varchar[]
);

我有以下兩行:

INSERT INTO contacts (first_name, last_name)
VALUES (ARRAY['Samin'] , Array['Var']),
(ARRAY['Sara', 'pooya'] , Array['Rad', 'Mohammadi']);

select * from contacts;

我想做一個結果為以下 output 的查詢:

#row1: {Samin-Var}
#row2: {Sara-Rad, pooya-Mohammadi}

這可以使用 PostgreSQL 中的自定義 function 來完成。

CREATE OR REPLACE FUNCTION merge_names(firsts varchar[], lasts varchar[])
RETURNS varchar[] AS
$$
DECLARE m varchar[];
    BEGIN
        FOR i IN 1..cardinality(firsts)
        LOOP
            m[i]:= firsts[i] || '-' || lasts[i];
        END LOOP;
        RETURN m;
    END;
$$ LANGUAGE plpgsql;

這里我們假設firstslasts的長度相同。

使用示例:

SELECT merge_names(first_name, last_name)
FROM contacts;

您可以使用橫向連接將 arrays 轉換為行並將它們聚合回您想要的名稱:

select n.names
from contacts c
  cross join lateral (
     select array_agg(concat_ws('-', x.first_name, x.last_name) order by x.nr) as names
     from unnest(c.first_name, c.last_name) with ordinality as x(first_name, last_name, nr)
  ) as n

在線示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM