如何在Postgres函数中计时(间隔)加法

时间:2020-01-22 15:40:22

标签: sql postgresql plpgsql intervals

我有以下代码

CREATE OR REPLACE FUNCTION public.getcompletepause(VARIADIC arr text[])
RETURNS interval 
LANGUAGE plpgsql
AS $function$

declare

slice TEXT[]; 
blancotime interval;
returnval interval; --Buffervalue
timetime interval;


begin


blancotime = '00:00:00';

FOR i IN 1..array_length($1,1) BY 1 loop

slice := $1[i:i+1];

returnval = slice[1];

END LOOP;
timetime= returnval + returnval;
return returnval;
END;
$function$
;

我的输入参数看起来像这样:

select getcompletepause('00:01:20','01:10:00',...) --variadic parameter input

我希望所有传入的时间都将被添加到一个完成时间中,例如

01:11:20,这是2个输入的完整时间

您能帮我吗?谢谢大家!

1 个答案:

答案 0 :(得分:0)

甚至不需要循环,甚至不需要PL / pgSQL:

只需将输入值强制转换为interval并汇总到数组元素上即可:

CREATE OR REPLACE FUNCTION public.getcompletepause(VARIADIC arr text[])
  RETURNS interval 
  LANGUAGE sql
AS
$function$
  select sum(d::interval)
  from unnest(arr) as t(d);
$function$
;

正确使用iterate over the elements of the array的方法是使用foreach。然后,您可以简单地将值添加到返回值中。

CREATE OR REPLACE FUNCTION public.getcompletepause(VARIADIC arr text[])
RETURNS interval 
LANGUAGE plpgsql
AS $function$

declare
  returnval interval;
  slice text;
begin
  returnval := '0'::interval;
  foreach slice in array arr loop
    returnval := returnval + slice::interval;
  end loop;

  return returnval;
END;
$function$
;

Online example