【发布时间】:2018-12-10 17:45:23
【问题描述】:
我有一个postgres 查询,当我将它作为查询运行时,它运行良好。但是,我想将其转换为pl/r 并能够动态输入开始和结束日期。
有效的 SQL 是:
with date as (
select d as first_day,
d + interval '1 month' - interval '1 day' as last_day
from generate_series('2010-01-01'::date,
'2018-12-01'::date,
'1 month') as d
) select last_day::date as snapshot_date from date;
想做一个 pl/r like:
DROP FUNCTION IF EXISTS standard.seq_monthly(min_date_str char, max_date_str char);
CREATE FUNCTION standard.seq_monthly(min_date_str char, max_date_str char)
RETURNS setof dates AS
$$
with date as (
select d as first_day,
d + interval '1 month' - interval '1 day' as last_day
from generate_series(min_date_str::date,
max_date_str::date,
'1 month') as d
) select last_day::date as snapshot_date from date;
$$
LANGUAGE 'plr';
select * from standard.seq_monthly('2010-01-01' , '2018-12-01')
但是,我在运行该函数时遇到了错误。错误是
在“PLR711818
已尝试将最大最小日期也声明为日期。
非常感谢任何帮助。
【问题讨论】:
-
PL/R需要 R 代码而不是 SQL。顺便说一句,使用 SQL 比任何过程扩展(包括 Postgres 的内置 plpgsql)更有效。 -
BTW:
date几乎是一个保留字。你可能会输,现在或将来。
标签: sql r postgresql plr