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



我有一个数据库函数,如下所示:

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);

相关内容

  • 没有找到相关文章

最新更新