微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgressql中的datediff函数

如何解决postgressql中的datediff函数

我在 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时,报错=时间戳类型为“ date”的输入语法无效

解决方法

如果您想为-运算符编写一个包装程序,以便始终从当前日期中减去通过日期,则需要更改函数以返回结果,例如returns integer

PL / pgSQL函数还需要一个return语句才能实际返回值。

current_date是一个内置函数,您不能将其用作变量名-开始时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');

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。