我试图从orderdate函数中获取年份
类型orderdate日期
create or replace function getyearfromdate(year date)returns
table
as
$$
begin
return QUERY execute (
'select extract (year from orderdate) FROM public.orderalbum'
);
end;
$$
language plpgsql;
我写了一个逻辑,但不能创建一个函数
我想从订单日期返回年份。
我想传递一个orderdate并从函数
返回年份我正面对下面的错误
ERROR: syntax error at or near "as" LINE 3: as ^ SQL state: 42601 Character: 70
根据您的评论,似乎您只想要一个围绕extract()
函数的包装器。在这种情况下,您不需要set返回函数。而且你不需要PL/pgSQL甚至动态SQL:
create or replace function getyearfromdate(p_date_value date)
returns int --<< make this a scalar function!
as
$$
select extract(year from p_date_value)::int;
$$
language sql;
请注意,我重命名了你的参数,因为我发现一个名为year
的参数为date
值非常混乱。
这个函数可以用作SELECT列表的一部分:
SELECT ..., getyearfromdate(orderdate)
FROM public.orderalbum
GROUP BY ...
基于评论澄清前问题的原始答案
在手册中returns table
需要一个表定义。
你使用动态SQL也是没用的。
create or replace function getyearfromdate(year date)
returns table (year_of_month int)
as
$$
begin
return QUERY
select extract(year from orderdate)::int
FROM public.orderalbum;
end;
$$
language plpgsql;
我不知道为什么你要传递一个参数给你从未使用过的函数。