2015-02-23 41 views
0

閱讀this後,我寫了一個天真試圖從這個PostgreSQL的:動態限幅符號數組

ARRAY[[1,2,3], [4,5,6], [7,8,9]]

產生這種

col1 
--------- 
1 
4 
7 

這工作

SELECT unnest((ARRAY[[1,2,3], [4,5,6], [7,8,9]])[1:3][1:1]);

但我在我的情況下,我不知道外部陣列的長度。

那麼有沒有辦法將切片「字符串」拼湊在一起考慮這種變化?

這是我的嘗試。我知道,這是一個有點滑稽

_ids := _ids_2D[('1:' || array_length(_ids_2D, 1)::text)::int][1:1];

正如你所看到的,我只是想創建的[1:n]效果。顯然'1:3'不會很好地解析數組切片需要的內容。

我可以明明使用類似unnest_2d_1d歐文提到了上面鏈接的答案,但希望的東西更優雅。

+0

你想要一個數組(第一級)的所有嵌套(第二級)的第一個元素? – lnrdo 2015-02-23 16:10:02

+0

我不確定array_length是否不起作用,因爲無論如何1:n都是一個字符串。需要檢查。 – lnrdo 2015-02-24 09:31:04

回答

2

如果你試圖讓所有嵌套(第二尺寸)的陣列的第一個元素的陣列(第一尺寸)內,那麼你可以使用

array_upper(anyarray, 1) 

獲取特定維度的所有元素

anyarray[1:array_upper(anyarray, 1)][<dimension num>:<dimension num>] 

例如,要獲得第一尺寸

anyarray[1:array_upper(anyarray, 1)][1:1] 

的所有元素如在上面的代碼。有關更多信息,請參閱PostgreSQL手冊中有關Arrays的部分。

+0

好東西Inrdo!我使用的'array_length'也可以工作。但它試圖首先造成一個字符串,導致我的問題。 – poshest 2015-02-23 21:08:31