PostgreSQL中create函数的问题



我试图从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;

我不知道为什么你要传递一个参数给你从未使用过的函数。

最新更新