sql - PostgreSQL 函数返回表

标签 sql postgresql function

我想在 PostgreSQL 上设置一个返回表的函数。这是函数的源代码:

   CREATE OR REPLACE FUNCTION feiertag(inDate Date) 
     RETURNS TABLE (eingabeDatum DATE, f_heute INT, f_1 INT, f_2 INT, f_3 INT, f_5 INT) 
    AS $$
            DECLARE
              f_heute integer := 0;
              f_1 integer := 0;
              f_2 integer := 0;
              f_3 integer := 0;
              f_5 integer := 0;
            BEGIN
                    SELECT 1 INTO f_heute FROM feiertage where datum = inDate;
                    SELECT 1 INTO f_1 FROM feiertage where datum = (inDate + interval '1' day);
                    SELECT 1 INTO f_2 FROM feiertage where datum = (inDate + interval '2' day);
                    SELECT 1 INTO f_3 FROM feiertage where datum = (inDate + interval '3' day);
                    SELECT 1 INTO f_5 FROM feiertage where datum = (inDate + interval '5' day);

   RETURN QUERY SELECT inDate as eingabeDatum, coalesce(f_heute, 0) as f_heute, coalesce(f_1,0) as f_1, coalesce(f_2,0) as f_2, coalesce(f_3,0) as f_3, coalesce(f_5,0) as f_5 ;
            END;
    $$ LANGUAGE plpgsql;

调用该函数仅返回一列以“,”分隔的值:

psql (9.5.12)
Type "help" for help.

tarec=> select feiertag('2017-01-01');
        feiertag        
------------------------
 (2017-01-01,1,0,0,0,0)
(1 row)

我期望不同的列(每个值对应一个列,因为在函数的开头指定了表),而不是只有一个包含所有值。有谁知道为什么会这样以及我该如何解决这个问题?

谢谢 蒂莫

最佳答案

使用

SELECT *
       FROM feiertag('2017-01-01');

代替

SELECT feiertag('2017-01-01');

以表格形式获取结果。

(将函数视为表格。)

关于sql - PostgreSQL 函数返回表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50453555/

相关文章:

mysql - MYSQL中查询的逆向

postgresql - 如何在 Postgresql 中备份和恢复 Sonarqube 数据库

ruby-on-rails - 如何在 rails 中测试各种测试用例的 postgres 触发器功能?

c# - 可以在没有循环的情况下做到这一点吗?

python - 从另一个函数调用函数并继续(不要等待完成)python

sql - 无法重置分区组(特别是窗口函数和 PostgreSQL)

sql - Mysql查询问题

ruby-on-rails - Rake 无法在 Docker/Rails/Postgres 设置中运行 Rspec 规范(但网络应用程序运行良好)

r - 在 R 中使用嵌套 for 循环创建数据框

mysql - 展示 SQL - NoSQL 环境优势的最佳方法是什么?