PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

2d सरणी से 1d सरणी का चयन कैसे करें?

पहला स्लाइस पाने के लिए एक सरणी का:

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;

एसक्यूएल फिडल।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSql में आरक्षण से केवल कार्य समय कैसे वापस करें?

  2. psycopg2.OperationalError:FATAL:असमर्थित फ्रंटएंड प्रोटोकॉल 1234.5679:सर्वर 2.0 से 3.0 का समर्थन करता है

  3. कनेक्शन पूलिंग का उपयोग करके PostgreSQL में स्केलिंग कनेक्शन

  4. Windows पर GeoDjango:GDAL लाइब्रेरी / OSError नहीं ढूँढ सका:[WinError 126] निर्दिष्ट मॉड्यूल नहीं मिला

  5. SQLAlchemy - परीक्षण के लिए SQLite और विकास के लिए Postgresql - पोर्ट कैसे करें?