PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да избера 1d масив от 2d масив?

За да получите първия отрез на масив:

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() в Postgres 8.3

Отговор на вашия коментар:
Уики страницата, към която правите връзка, беше малко подвеждаща. Актуализирах го с код за двумерни масиви.

unnest() за едномерен масив:

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() за двумерен масив:

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;

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. Класът не е намерен, зарежда JDBC org.postgresql.Driver

  2. СЪЗДАВАНЕ НА ЕЗИК plpython3u – PostgreSQL 9.6

  3. непълна информация от заявка за pg_views

  4. Филтриране на Django JSONField

  5. PostgreSQL - Замяна на HTML обекти