PostgreSQL中创建函数问题

wi3ka0sx  于 2022-12-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(164)

我正在尝试从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;

我编写了逻辑,但无法创建函数
我想从订单日期返回年份。
我想从函数中传递订单日期和返回年份
我面临以下错误

ERROR:  syntax error at or near "as"
LINE 3: as
        ^
SQL state: 42601
Character: 70
q9yhzks0

q9yhzks01#

根据您的评论,您似乎只需要一个extract()函数的 Package 器,在这种情况下,您不需要一个返回集合的函数,并且您不需要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;

注意,我重命名了参数,因为我发现date值的参数year非常混乱。
然后,该函数可用作SELECT列表的一部分:

SELECT ..., getyearfromdate(orderdate)
FROM public.orderalbum
GROUP BY ...

基于评论澄清前问题的原始答复。
As documented in the manualreturns 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;


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

相关问题