如何解决postgressql中的datediff函数
这是代码
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 举报,一经查实,本站将立刻删除。