Как было сказано ранее в oracle, у нас нет предопределенных функций для определения разницы во времени, и нам нужно сделать это самостоятельно
Однако у меня есть альтернативы с моим опытом работы, которые отличаются только сроки читаемости по сравнению с уже имеющимся ответом
/*
with fields having already in timestamp format
*/
WITH time_difference AS
(SELECT timestamp'2020-08-04 07:00:00' start_dt
,timestamp'2020-08-04 07:30:00' end_dt
FROM dual)
SELECT EXTRACT(HOUR FROM(end_dt - start_dt)) hrs
,EXTRACT(MINUTE FROM(end_dt - start_dt)) mins
,EXTRACT(SECOND FROM(end_dt - start_dt)) secs
,end_dt - start_dt diff_interval
FROM time_difference;
/*
with fields having date, subtracting them results in a number,
so we can case them to timestamps and do as above
*/
WITH field_in_dates AS
(SELECT to_date('04.08.2020 07:00:00','dd.mm.yyyy hh24:mi:ss') start_dt
,to_date('04.08.2020 07:30:00','dd.mm.yyyy hh24:mi:ss')end_dt
FROM dual),
time_difference AS
(SELECT to_timestamp(to_char(start_dt,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') start_dt
,to_timestamp(to_char(end_dt,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') end_dt
FROM field_in_dates)
SELECT EXTRACT(HOUR FROM(end_dt - start_dt)) hrs
,EXTRACT(MINUTE FROM(end_dt - start_dt)) mins
,EXTRACT(SECOND FROM(end_dt - start_dt)) secs
,end_dt - start_dt diff_interval
FROM time_difference;