我有以下代码
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个输入的完整时间
您能帮我吗?谢谢大家!
答案 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$
;