将日期间隔作为函数参数传递

Pass date intervals as function parameters

我有一个数据库函数如下:

drop function test(month_interval text)
create or replace function test (month_interval text) returns date as
$$
select ('2020-07-01'::date - interval month_interval)::date;
$$ language sql;


   select * from test('2 months')

我有一个场景,我想动态计算月份间隔,并希望有一个数据库查询可以通过将月份间隔作为函数参数传递来使用。但是,当我这样做时,出现以下错误:

ERROR: syntax error at or near "month_interval"

您可以将文本转换为间隔:

create or replace function test (month_interval text) returns date as
$$
select ('2020-07-01'::date - month_interval::interval)::date;
$$ language sql;

select test('2 months');

但为什么不直接传递 interval 呢?

create or replace function test (month_interval interval) returns date as
$$
select ('2020-07-01'::date - month_interval)::date;
$$ language sql;

select test(interval '2 months');

或者您可以传递月数,然后使用 make_interval:

create or replace function test (num_months int) returns date as
$$
select ('2020-07-01'::date - make_interval(months => num_months))::date;
$$ language sql;

select test(2);