数组解嵌套

来自 PostgreSQL Wiki
跳转到导航跳转到搜索

兼容性片段

数组解嵌套

适用于 PostgreSQL

<=8.3

编写语言

SQL

依赖于

PostgreSQL 8.4 包含一个函数,用于将任何维度的数组扩展为一组元素。在处理数组时非常有用。
以下是将其添加到 8.3 中的方法,适用于 _一维数组_(由 Scott Bailey 'Artacus' 提供)

CREATE OR REPLACE FUNCTION unnest(anyarray)
  RETURNS SETOF anyelement AS
$BODY$
SELECT $1[i]
FROM   generate_series(array_lower($1,1), array_upper($1,1)) i
$BODY$
  LANGUAGE sql IMMUTABLE;


适用于 _二维数组_(由 Erwin Brandstetter 提供)

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;


从二维数组中获取 _一维数组_(由 Erwin Brandstetter 提供)

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 演示。