我有一个数据库函数,如下所示:
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);