首页 > 解决方案 > 在 postgresql 中创建 N 天间隔函数

问题描述

我正在尝试在 postgresql 中创建一个函数,该函数以一定的间隔返回两个日期之间的一组日期。例如,如果我传递这两个日期参数,比如most_recent_day = 2020-01-10andmininum_day = 2020-01-01和这个间隔参数n_day_group_interval = 5,函数将返回以下集合:

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

以下是我的尝试,它给出了syntax error at or near "end". 谢谢您的帮助。

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;

标签: sqlpostgresqlgenerate-series

解决方案


你把事情复杂化了。LATERAL 不是必需的,date_trunc('day', ..)与转换为 相同date

要基于变量创建区间,最简单的方法是使用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;

推荐阅读