如何从二维数组中选择一维数组? [英] How to select 1d array from 2d array?

查看:58
本文介绍了如何从二维数组中选择一维数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有二维数组,只想选择其中的第一个元素,即一维数组.
我该怎么做?

I have 2d array and want to select only first element of it, which is 1d array.
How do I do that?

推荐答案

获取数组:

To get the first slice of an array:

SELECT my_arr[1:1];

结果数组与输入具有相同的数组维度.
我之前的回答中的详细信息:

The resulting array has the same array dimensions as the input.
Details in my previous answer here:

展平结果:

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

在 Postgres 8.3 中模拟 unnest()

回复您的评论:
您链接到的 Wiki 页面 有点误导.我用二维数组的代码更新了它.

Emulate unnest() in Postgres 8.3

Response to your comment:
The Wiki page you are linking to was a bit misleading. I updated it with code for 2-dimensional arrays.

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 中默认没有安装:

The aggregate function array_agg() is not installed by default in Postgres 8.3:

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

将二维数组取消嵌套到一维数组:

Unnest 2d array to 1d arrays:

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 小提琴.

这篇关于如何从二维数组中选择一维数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆