2016-02-27 30 views
1
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 and 2016-03-27)從複合型陣列獲取第一個值

我想我需要使用切片,但它不適合我。

回答

0

您可以使用unnest() function到數組轉換成組的列:

SELECT date_ 
FROM all_people_array_table, unnest(people_array); 

unnest()函數是表函數,所以你使用它像你將一個表名。這樣的表函數可以使用先前指定關係的列(參見上面鏈接部分後面的「LATERAL子查詢」部分)。

但你真的應該檢討你的餐桌設計。像這樣使用數組會破壞數據的關係結構。您的設計看起來更像是一個從20世紀60年代開始的數據庫設計範例hierarchical model。而不是陣列,使用從一個表到下一個表中的鍵。