Редактировать: если вам нужен номер, то
trunc(end_date-start_date)*24+
to_number(to_char(trunc(sysdate)+(end_date-start_date),'HH24.MI'))
Для строкового результата, если дельта МЕНЬШЕ, ЧЕМ 24 Ч: я бы выбрал
to_char(trunc(sysdate)+(end_date-start_date),'HH24.MI')
или ...'HH24:MI:SS'
,но это мое личное предпочтение.
для сроков, превышающих 24ч, я бы поставил префикс с
trunc(end_date-start_date)||"days "||
to_char(trunc(sysdate)+(end_date-start_date),'HH24.MI')
Да, поскольку оракул считает в днях, с точностью до секунд, вы имеете дело с арифметическими проблемами.Однажды, потому что вы обрабатываете только минуты (так что вы можете округлить свое число до trunc(days*24*60+0.5)/24/60
), но неточность двоичной арифметики на числе 1/24/60 может по-прежнему вызывать у вас проблемы.
Edit2.1:
to_char(24*(trunc(end_date)-trunc(start_date))+to_number(to_char(end_date,'HH24.MI'))-to_number(to_char(start_date,'HH24.MI')),'99999.99')
Но результат может быть довольно запутанным для среднего, так как десятичное число 7.50 будет означать семь с половиной часов или, по крайней мере, 7 часов 50 минут, в отличие от прошедшего времени 7 часов 10 минут.