postgresql 中的 datediff 函数

datediff function in postgressql

我是 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');

当我 select diff it error = 类型时间戳的输入语法无效:“date”

如果您想围绕 - 运算符编写一个始终从当前日期减去过去日期的日期的包装器,您需要将函数更改为 return 结果,例如returns integer.

一个 PL/pgSQL 函数还需要一个 return 语句来实际 return 一个值。

current_date 是一个 built-in 函数,您不能将它用作变量名 - current_date 本身的赋值从一开始就没有意义。只需在需要的地方使用 current_date 即可,无需(重新)将其声明为变量或为其赋值。

As documented in the manual 从另一个 date 值中减去一个 date 值得出天数差异。没有必要使用 date_part() 来获得它(并且你不能在整数上使用 date_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');