我想获取一个n维度数组和包含n-1维数组行的返回集.例如,获取数组ARRAY[[1,2,3], [4,5,6], [7,8,9]]并返回一个集合{1,2,3}, {4,5,6}, {7,8,9}.使用unnest返回集合1,2,3,4,5,6,7,8,9.
我尝试从PostgreSQL 8.4中获取不需要的函数,这似乎就像我正在寻找的那样:
CREATE OR REPLACE FUNCTION tstng.unnest2(anyarray)
RETURNS SETOF anyelement
LANGUAGE plpgsql
IMMUTABLE
AS $$
BEGIN
RETURN QUERY SELECT $1[i]
FROM generate_series(array_lower($1,1), array_upper($1,1)) i;
END;
$$;
Run Code Online (Sandbox Code Playgroud)
但是,SELECT tstng.unnest2(ARRAY[[1,2,3], [4,5,6], [7,8,9]]);返回集合, ,(即:3个空行).
我还发现SELECT (ARRAY[[1,2,3], [4,5,6], [7,8,9]])[0];返回null,我认为这是我问题的根源.
我试图将数据作为一个多维数组传递,我的行为对我来说似乎很奇怪.具体来说,我试图从二维数组中获取单个元素(因此我的二维数组中的一维数组),并且它不能按照我期望的方式工作.
在下面的例子中,#2,4和5以我期望的方式工作,但1和3没有.
db=> select s.col[2] from (select array[[1,2,3],[4,5,6]] as col) s;
col
-----
(1 row)
db=> select s.col[2:2] from (select array[[1,2,3],[4,5,6]] as col) s;
col
-----
{{4,5,6}}
(1 row)
db=> select array[s.col[2]] from (select array[[1,2,3],[4,5,6]] as col) s;
array
--------
{NULL}
(1 row)
db=> select array[s.col[2:2]] from (select array[[1,2,3],[4,5,6]] as col) s;
array
-------------
{{{4,5,6}}}
(1 row)
db=> select s.col[2][1] from (select array[[1,2,3],[4,5,6]] as col) s;
col
-----
4
(1 row)
Run Code Online (Sandbox Code Playgroud)
有这方面的文件吗?我现在有一些对我来说运作良好的东西,但它很难看,我担心它不会做我想做的事情.从技术上讲,我得到一个二维数组,其中1维只有1个元素.我宁愿得到一个阵列.
我读过(其中包括):
我只是没有看到我在寻找什么.
假设我有这个三维数组:
ARRAY[[['abc', 'def'], ['ghi', 'jkl']], [['mno', 'pqr'], ['stu', 'vwx']]]
Run Code Online (Sandbox Code Playgroud)
我怎样才能摆脱{{abc,def},{ghi,jkl}}它?
如果我尝试:
SELECT (ARRAY[[['abc', 'def'], ['ghi', 'jkl']], [['mno', 'pqr'], ['stu', 'vwx']]])[1:1]
Run Code Online (Sandbox Code Playgroud)
我明白了{{{abc,def},{ghi,jkl}}},但我需要{{abc,def},{ghi,jkl}}。
类似问题的答案可以解决二维数组的问题,例如这个,但这些答案不适用于 n 维数组。
这是一个非常基本的任务,但在 PostgreSQL 中似乎相当棘手。