我正在开发一个函数,我在这个函数中创建了一个二维数组......
{{1, 'John', 'Smith'}, {1, 'Jane', 'Doe'}, {3, 'Tony', 'Stark'}}
我正在构建的功能结合了来自几个不同查询的数据,即使看起来似乎没有必要,但到目前为止,我似乎只能合并我的数据。
我遇到的问题是将我的数组显示为表格。
我正在调用我的函数:
SELECT * FROM my_func();
^^从上面获取数组输出。 ^^
我希望能够返回这样的内容: - 如果我可以标记列,那就更好了。
Col1 | Col2 | Col3
1 | John | Smith
2 | Jane | Doe
3 | Tony | Stark
我试过:SELECT * FROM my_func();
哪个更好,但仍然无法使用,因为它将所有内容都放在一个列中。
Col1
1
John
Smith
2
Jane
Doe
3
Tony
Stark
答案 0 :(得分:1)
问题中缺少信息,因此假设您要返回三列(int, text, text)
。还假设当前的Postgres 9.5。
在LATERAL
加入中使用generate_subscripts()
:
WITH t(a) AS (
SELECT '{{1, John, Smith}, {1, Jane, Doe}, {3, Tony, Stark}}'::text[]
)
SELECT t.a[i][1]::int AS col1, t.a[i][2] AS col2, t.a[i][3] AS col3
FROM t, generate_subscripts(t.a, 1) i;
相关:
循环FOREACH target [ SLICE number ] IN ARRAY expression
:
CREATE OR REPLACE FUNCTION my_func(_arr text[])
RETURNS TABLE (col1 int, col2 text, col3 text) AS
$func$
DECLARE
m text[];
BEGIN
FOREACH m SLICE 1 IN ARRAY _arr
LOOP
RETURN QUERY SELECT m[1]::int, m[2], m[3];
END LOOP;
END
$func$ LANGUAGE plpgsql;
呼叫:
WITH t(a) AS (
SELECT '{{1, John, Smith}, {1, Jane, Doe}, {3, Tony, Stark}}'::text[]
)
SELECT f.*
FROM t, my_func(t.a) f;
相关:
每个人都返回:
col1 | col2 | col3
------+------+-------
1 | John | Smith
1 | Jane | Doe
3 | Tony | Stark