从复合类型数组中获取第一个值

时间:2016-02-27 12:06:51

标签: arrays postgresql postgresql-9.4

CREATE TABLE people(   
name_ varchar(50) NOT NULL,
count int NOT NULL DEFAULT 0
);

CREATE TABLE person_added(
date_ date NOT NULL,
all_people_ people[],
all_people_count int NOT NULL
);

CREATE TABLE all_people_array_table(
id SERIAL,
people_array person_added[]
);


{"(2016-02-27,{(Jack,3),(John,6)},1000)","(2016-03-27,{(Ben,3),(Francis,6)},2000)"}

people_array包含person_added个复合类型。我需要在这个数组中获取日期。 (2016-02-27和2016-03-27)

我想我需要使用切片,但它对我不起作用。

1 个答案:

答案 0 :(得分:0)

您可以使用unnest() function将数组转换为一组行:

SELECT date_
FROM all_people_array_table, unnest(people_array);

unnest()函数是一个表函数,因此您可以像使用表名一样使用它。此类表函数可以使用先前指定的关系中的列(请参阅" LATERAL子查询"参见上面链接中的部分)。

但你应该仔细检查你的桌面设计。使用这样的数组会破坏数据的关系结构。您的设计看起来更像是hierarchical model,这是1960年代的数据库设计范例。而不是数组,使用从一个表到下一个表的键。