Конвертация данных в PL/SQL

Есть два запроса, связанные UNION, выдающие результат в формате char, необходимо их сложить.

Результаты выглядят в виде времени, например, "00:02:55" и "01:44:01". Как их сложить?

При попытке обычного сложения выдает ошибку:

"Invalid number"

Как быть?


Ответы (1 шт):

Автор решения: another_login
with t as (
  select '00:02:55' some_time from dual union all
  select '01:44:01' from dual
  )
select numtodsinterval(sum(to_char(to_date(some_time,'hh24:mi:ss'),'sssss')),'second') total_time
from t

результат:

TOTAL_TIME
+000000000 01:46:56.000000000

UPD: Если нужна меньшая точность, можно конвертировать:

with t as (
  select '00:02:55' some_time from dual union all
  select '01:44:01' from dual
  )
select cast(numtodsinterval(sum(to_char(to_date(some_time,'hh24:mi:ss'),'sssss')),'second') as interval day(2) to second(0)) total_time
from t

результат:

TOTAL_TIME
+00 01:46:56
→ Ссылка