sql - 从函数输出二维数组作为行和列

标签 sql postgresql plpgsql

我正在开发一个函数,我在其中创建一个二维数组,类似于...

{{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/

相关文章:

postgresql - 错误: cursor "<unnamed portal>" does not exist

postgresql - 使错误的 PL/pgSQL 函数在创建过程中失败(不是在第一次调用时)

SQL - 约束仅影响返回值之一?

SQL 对数据进行分页,其中分页从给定的主键开始

ruby-on-rails - 如何确保 PostgreSQL 驱动器是线程安全的

sql - 使用 JOIN 而不是 HAVING(COUNT > n) 来提高性能

postgresql - 存储过程中的业务逻辑与中间层

postgresql - 在每月的特定日期运行 PostgreSQL 函数

mysql - 表被指定两次,既作为 INSERT 的目标又作为单独的数据源

PHP 和 SQL 空间问题