पहला स्लाइस पाने के लिए एक सरणी का:
SELECT my_arr[1:1];
परिणामी सरणी में समान सरणी आयाम . हैं इनपुट के रूप में।
मेरे पिछले उत्तर में विवरण यहाँ:
- सरणी को एक स्तर से खोलना
समतल . करने के लिए परिणाम:
SELECT ARRAY(SELECT unnest(my_arr[1:1]));
या क्लीनर:
SELECT ARRAY(SELECT * FROM unnest(my_arr)[1:1]));
उदाहरण
SELECT (ARRAY[[1,2,3], [4,5,6], [7,8,9]])[1:1];
परिणाम:
{{1,2,3}} -- 2D array
या:
SELECT ARRAY(
SELECT unnest((ARRAY[[1,2,3], [4,5,6], [7,8,9]])[1:1])
);
परिणाम:
{1,2,3} -- 1D array
अनुकरण करें unnest()
पोस्टग्रेज 8.3 में
आपकी टिप्पणी का उत्तर:
जिस विकी पृष्ठ से आप लिंक कर रहे हैं वह थोड़ा भ्रामक था। मैंने इसे 2-आयामी सरणियों के लिए कोड के साथ अपडेट किया।
unnest()
1-आयामी सरणी के लिए:
CREATE OR REPLACE FUNCTION unnest_1d(anyarray)
RETURNS SETOF anyelement AS
$func$
SELECT $1[i]
FROM generate_series(array_lower($1,1), array_upper($1,1)) i
$func$ LANGUAGE sql IMMUTABLE;
unnest()
2-आयामी सरणी के लिए:
CREATE OR REPLACE FUNCTION unnest_2d(anyarray)
RETURNS SETOF anyelement AS
$func$
SELECT $1[d1][d2]
FROM generate_series(array_lower($1,1), array_upper($1,1)) d1
, generate_series(array_lower($1,2), array_upper($1,2)) d2
$func$ LANGUAGE sql IMMUTABLE;
समग्र कार्य array_agg()
Postgres 8.3 में डिफ़ॉल्ट रूप से स्थापित नहीं है:
CREATE AGGREGATE array_agg(anyelement) (
SFUNC = array_append,
STYPE = anyarray,
INITCOND = '{}'
);
2d सरणी को 1d सरणियों से अलग करें:
CREATE OR REPLACE FUNCTION unnest_2d_1d(anyarray)
RETURNS SETOF anyarray AS
$func$
SELECT array_agg($1[d1][d2])
FROM generate_series(array_lower($1,1), array_upper($1,1)) d1
, generate_series(array_lower($1,2), array_upper($1,2)) d2
GROUP BY d1
ORDER BY d1
$func$ LANGUAGE sql IMMUTABLE;
एसक्यूएल फिडल।