如何选择二维数组PostgreSQL的一维数组 [英] How to select 1d array from 2d array postgresql
问题描述
我有二维数组,并希望选择只第一要素,这是一维数组。我该怎么做呢?
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 the array
SELECT my_arr[1:1];
所得数组有同一阵列尺寸作为输入。结果
在我的previous详细答案在这里:
The resulting array has the same array dimensions as the input.
Details in my previous answer here:
- Unnest array by one level
要平展结果:
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
您的评论回应:结果
要链接到中的 Wiki页面是有点误导。我更新了它,并添加code 2维数组:
Emulate unnest() in Postgres 8.3
Response to your comment:
The Wiki page you are linking to was a bit misleading. I updated it and added code for 2-dimensional arrays:
UNNEST()
1维数组:
CREATE OR REPLACE FUNCTION unnest_1d(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;
UNNEST()
2维数组:
CREATE OR REPLACE FUNCTION unnest_2d(anyarray)
RETURNS SETOF anyelement AS
$BODY$
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
$BODY$
LANGUAGE sql IMMUTABLE;
聚合函数 ARRAY_AGG()
在PG 8.3不是默认安装的:
Aggregate function array_agg()
not installed by default in pg 8.3:
CREATE AGGREGATE array_agg(anyelement) (
SFUNC=array_append,
STYPE=anyarray,
INITCOND='{}'
);
UNNEST二维数组以一维数组:
Unnest 2d array to 1d arrays:
CREATE OR REPLACE FUNCTION unnest_2d_1d(anyarray)
RETURNS SETOF anyarray AS
$BODY$
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
$BODY$
LANGUAGE sql IMMUTABLE;
这篇关于如何选择二维数组PostgreSQL的一维数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!