Дата в часах (всего) - PullRequest
0 голосов
/ 13 июня 2019

У меня есть этот запрос:

   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 - это архив, в котором хранятся часы и минуты в следующем формате: чч: мм (например, '05: 22 ').

Как мне получить результат в виде общего количества часов (например 252: 20)?

Спасибо

1 Ответ

2 голосов
/ 13 июня 2019

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   
...