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