PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara memilih larik 1d dari larik 2d?

Untuk mendapatkan irisan pertama dari sebuah array:

SELECT my_arr[1:1];

Larik yang dihasilkan memiliki dimensi larik yang sama sebagai masukan.
Rincian jawaban saya sebelumnya di sini:

  • Hapus susunan satu tingkat

Untuk meratakan hasilnya:

SELECT ARRAY(SELECT unnest(my_arr[1:1]));

Atau pembersih:

SELECT ARRAY(SELECT * FROM unnest(my_arr)[1:1]));

Contoh

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

Hasil:

{{1,2,3}}  -- 2D array

Atau:

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

Hasil:

{1,2,3}  -- 1D array

Meniru unnest() di Postgres 8.3

Tanggapan atas komentar Anda:
Halaman Wiki yang Anda tautkan agak menyesatkan. Saya memperbaruinya dengan kode untuk array 2 dimensi.

unnest() untuk larik 1 dimensi:

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() untuk larik 2 dimensi:

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;

Fungsi agregat array_agg() tidak diinstal secara default di Postgres 8.3:

CREATE AGGREGATE array_agg(anyelement) (
 SFUNC = array_append,
 STYPE = anyarray,
 INITCOND = '{}'
);

Hapus array 2d ke array 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;

SQL Fiddle.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lumen - Buat koneksi database saat runtime

  2. Penyatuan Koneksi Database Pekerja Seledri

  3. Bagaimana cara mengaktifkan php untuk bekerja dengan postgresql?

  4. Bagaimana Anda menggunakan variabel skrip di psql?

  5. Dapatkan nama pemilik DB di PostgreSql