简体   繁体   English

在 postgresql 中创建 N 天间隔 function

[英]Creating N days interval function in postgresql

I am trying to create a function in postgresql that returns a set of dates in between two dates with a certain interval.我正在尝试在 postgresql 中创建一个 function ,它返回两个日期之间具有一定间隔的一组日期。 For example, If I pass on these two date parameters like most_recent_day = 2020-01-10 and mininum_day = 2020-01-01 and this interval parameter n_day_group_interval = 5 , the function will return the following set:例如,如果我传递这两个日期参数,例如most_recent_day = 2020-01-10mininum_day = 2020-01-01以及此间隔参数n_day_group_interval = 5 ,则 function 将返回以下集合:

2020-01-10
2020-01-08
2020-01-06
2020-01-04
2020-01-02

Following was my attempt that gives an syntax error at or near "end" .以下是我syntax error at or near "end"尝试。 Thank you for your help.谢谢您的帮助。

create function get_n_day_group_dates(most_recent_day date, minimum_day date, n_day_group_interval varchar)
returns table (
    n_day_group_dates date
              )
    as $body$
    begin
        return query

    SELECT
                      date_trunc('day'::text, dd.dd)::date AS n_day_group_dates
               FROM

                    LATERAL generate_series(most_recent_day,
                        minimum_day,
                       '-'||n_day_group_interval||' day'::interval) dd(dd)
end;
    $body$
language plpgsql;

You are overcomplicating things.你把事情复杂化了。 LATERAL is not required and date_trunc('day', ..) is the same as casting to date . LATERAL 不是必需的, date_trunc('day', ..)与强制转换为date相同。

To create an interval based on a variable, the easiest way is to use make_interval()要基于变量创建间隔,最简单的方法是使用make_interval()

create function get_n_day_group_dates(most_recent_day date, minimum_day date, n_day_group_interval varchar)
returns table (n_day_group_dates date)
as $body$
  SELECT g.dt::date
  FROM generate_series(most_recent_day,
                       minimum_day,
                       make_interval(days => n_day_group_interval) as g(dt);
$body$
language sql;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM