我正在开发一个函数,我在其中创建一个二维数组,类似于...
{{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
最佳答案
问题中缺少信息,因此假设您要返回三列(int, text, text)
。还假设当前的 Postgres 9.5。
纯 SQL
使用generate_subscripts()
在 LATERAL
连接中:
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;
相关:
PL/pgSQL
用 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
关于sql - 从函数输出二维数组作为行和列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37467640/