Сумма разницы во времени - Oracle SQL - PullRequest
2 голосов
/ 01 июня 2019

У меня есть таблица:

table1

col1    start_date_time                 end_date_time
Test1   01-06-19 11:43:35.927422000 AM  01-06-19 11:44:20.127907000 AM
Test2   01-06-19 11:44:28.703518000 AM  01-06-19 11:45:06.538883000 AM
Test3   01-06-19 11:42:18.784477000 AM  01-06-19 11:42:27.635102000 AM

Я написал запрос, который дает мне разницу во времени:

select a.*, end_date_time - start_date_time exec_time from table1 a
order by exec_time desc;

Таблица вывода

col1    start_date_time                 end_date_time                   exec_time
Test1   01-06-19 11:43:35.927422000 AM  01-06-19 11:44:20.127907000 AM  +00 00:00:44.200485
Test2   01-06-19 11:44:28.703518000 AM  01-06-19 11:45:06.538883000 AM  +00 00:00:37.835365
Test3   01-06-19 11:42:18.784477000 AM  01-06-19 11:42:27.635102000 AM  +00 00:00:08.850625

Мне нужна сумма, например, 00: 01: 29.

Как я могу сложить exec_time в SQL?Мне нужно найти общее время на основе.

1 Ответ

3 голосов
/ 01 июня 2019

Oracle не поддерживает агрегацию интервальных типов данных, что является плачевным позором, потому что это был бы самый простой способ решения подобных проблем. Тем не менее, злобный ум Стю Эштон предложил преобразование интервалов в числа и обратно.

select numtodsinterval(  
  sum(  
    (sysdate+(end_date_time - start_date_time) - sysdate) * 24 * 60 * 60
        + extract(second from (end_date_time - start_date_time)) 
              - trunc(extract(second from (end_date_time - start_date_time))) -- (*)
  )  
  , 'second'  
)  
from table1; 

Вот демо на db <> fiddle .

(*) Эта строка делает ответ с точностью до микросекунд.

...