postgressql中的datediff函数

postgressql中的datediff函数,sql,postgresql,datetime,sql-function,Sql,Postgresql,Datetime,Sql Function,我是PostgreSQL的新手,我尝试创建函数 这是密码 CREATE OR REPLACE FUNCTION diff(date Timestamp) RETURNS void As $$ declare CURRENT_DATE Timestamp; number numeric; begin CURRENT_DATE=(SELECT CURRENT_DATE) ;

我是PostgreSQL的新手,我尝试创建函数

这是密码

    CREATE OR REPLACE FUNCTION diff(date Timestamp) RETURNS void
    As
    $$
    declare
    CURRENT_DATE Timestamp;
    number numeric;
    
    begin
            CURRENT_DATE=(SELECT CURRENT_DATE) ;
            
            number=(SELECT DATE_PART('day', 'date'::Timestamp - 'CURRENT_DATE'::Timestamp));
            
    end
   $$ LANGUAGE plpgsql;

select  diff('2020-08-18');

当我选择diff it error=invalid input syntax for type timestamp:“date”

时,如果您想为总是从当前日期减去传递日期的日期的
-
运算符编写一个包装器,则需要更改函数以返回结果,例如
返回整数

PL/pgSQL函数还需要
return
语句来实际返回值

current\u date
是一个内置函数,不能将其用作变量名,而且将
current\u date
赋值给它本身就没有意义了。只要在需要时使用
current_date
,无需(重新)将其声明为变量或为其赋值

从另一个
date
值中减去一个
date
值会产生以天为单位的差值。不需要使用
date\u part()
来获得该值(并且不能首先对整数使用
date\u part()

将这样的简单表达式包装到函数中也不需要PL/pgSQL:

在不了解更多细节的情况下,您似乎正在寻找以下信息:

create function diff(p_input date)
  returns integer
as
$$
  select p_input - current_date;
$$
language sql;
PL/pgSQL中使用(不需要)中间变量存储结果的等效实现如下所示:

create function diff(p_input date)
  returns integer
as
$$
declare
  l_result integer;
begin
  l_result := p_input - current_date;
  return l_result;
end;
$$
language plpgsql;
select diff(date '2020-08-18');
然后你可以这样使用它:

create function diff(p_input date)
  returns integer
as
$$
declare
  l_result integer;
begin
  l_result := p_input - current_date;
  return l_result;
end;
$$
language plpgsql;
select diff(date '2020-08-18');

这个函数应该做什么?特别是因为它实际上不返回任何内容(
返回void
)。为什么不简单地返回“日期”-current_date
?第一次创建函数时,我尝试创建这个函数,我想传递日期和函数计算日期差,我必须更改返回“日期”-current_date?你不需要为此编写函数,你可以简单地从一个日期减去另一个日期,例如,
当前日期-日期“2020-08-18”