Как добавить время (интервал) в функции postgres - PullRequest
0 голосов
/ 22 января 2020

У меня есть следующий код

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, это полное время двух входов

Можете ли вы помочь мне с этим? Спасибо, ребята!

1 Ответ

0 голосов
/ 22 января 2020

Нет необходимости в al oop или даже PL / pg SQL:

Просто приведите входные значения к 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$
;

Правильный способ перебора элементов массива - использовать 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$
;

Онлайн пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...