首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在postgresql中循环时选择多列?

如何在postgresql中循环时选择多列?
EN

Stack Overflow用户
提问于 2016-06-22 20:58:52
回答 1查看 455关注 0票数 0

请告诉我怎么做,我想在循环时选择多个列。

代码语言:javascript
复制
create or replace function insert_date_dimension("date" date)
 returns setof date as $$
declare
    dat date;
    start_date date;
    end_date date;
begin
    start_date := '2016/01/01';
    end_date := '2016/12/31';
    while start_date <= end_date loop
        --return next  start_date;
        select start_date,date_part('week',start_date),date_part('quarter',start_date),to_char(start_date, 'day'),to_char(start_date, 'month'),
        extract(year from current_date),extract(month from current_date);
        start_date:= start_date + interval  '1 day';
    end loop;
end;

$$语言plpgsql

代码语言:javascript
复制
ERROR:  query "SELECT    start_date,date_part('week',start_date),date_part('quarter',start_date),to_char(start_date, 'day'),to_char(start_date, 'month'),
        extract(year from current_date),extract(month from current_date)" returned 7 columns

上下文: PL/pgSQL函数insert_date_dimension(日期)返回下一个时的第11行

EN

回答 1

Stack Overflow用户

发布于 2016-06-22 21:42:19

出现该错误是因为您必须在PL/pgSQL函数中使用SELECT ... INTO ...。另外,你忘了RETURN一些东西。

使用generate_series要容易得多;这样您甚至不需要定义函数,只需使用INSERT INTO ... SELECT ...即可。

下面是我将编写的函数:

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION insert_date_dimension(
   OUT "date" date,
   OUT week integer,
   OUT quarter integer,
   OUT dayname text,
   OUT monthname text,
   OUT year integer,
   OUT month integer
) RETURNS SETOF RECORD STABLE LANGUAGE plpgsql AS
$$DECLARE
   dat date;
   start_date timestamp := '2016-01-01 00:00:00';
   end_date timestamp := '2016-12-31 00:00:00';
BEGIN
   RETURN QUERY SELECT
         d::date,
         date_part('week', d)::integer,
         date_part('quarter', d)::integer,
         to_char(d, 'day'),
         to_char(d, 'month'),
         date_part('year', d)::integer,
         date_part('month', d)::integer
      FROM generate_series(start_date, end_date, '1 day') d(d);
END;$$;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37968776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档