[英]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;
這里我們假設firsts
和lasts
的長度相同。
使用示例:
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.