У меня есть этот запрос:
SELECT
NUMTODSINTERVAL(
SUM( TO_DATE( MT.TI_CONTR, 'HH24:MI' ) - TO_DATE( '00:00', 'HH24:MI' ) ),
'DAY'
) AS total
FROM MYTABLE MT;
Выполняя этот запрос, я получаю следующее:
+22 19:02:00.000000
+94 19:26:00.000000
+46 03:50:00.000000
+76 08:30:00.000000
+44 02:42:00.000000
что, конечно же, группирует по дням часы, когда они достигают 24.
Столбец TI_CONTR представляет собой varchar, хранящий часы и минуты в следующем формате: чч:мм (например, «05:22»).
Как я могу получить результат в виде общего количества часов (например, 252:20)?
Спасибо


Oracle не позволяет вам выполнять SUM() для типов данных INTERVAL, так что это, вероятно, лучше всего решается с помощью старой доброй SUBSTR() и математики.
with dat as (SELECT '19:02' t1_contr from dual
union all
SELECT '19:26' t1_contr from dual
union all
SELECT '03:50' t1_contr from dual
union all
SELECT '08:30' t1_contr from dual
union all
SELECT '02:42' t1_contr from dual
)
select to_char(sum(substr(t1_contr,1,2)) --sum the hours, then add
+ trunc(sum(substr(t1_contr,4,2))/60)) --the hours portion of the summed minutes
||':'|| -- put in your separator
to_char( mod(sum(substr(t1_contr,4,2)),60)) --and append the summed minutes after removing the hours
from dat