postgressql中的datediff函数
我是PostgreSQL的新手,我尝试创建函数 这是密码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) ;
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”