Если вы приведете эти даты как отметки времени, вы можете легко вычесть их и увидеть относительно хороший результат:
SQL> with test (st, et) as
2 (select to_date('27.05.2020 00:52:48', 'dd.mm.yyyy hh24:mi:ss'),
3 to_date('27.05.2020 02:08:33', 'dd.mm.yyyy hh24:mi:ss')
4 from dual
5 )
6 select cast(et as timestamp) - cast(st as timestamp) diff
7 from test;
DIFF
--------------------------------------------------------------------------
+000000000 01:15:45.000000
SQL>
Если вы хотите отформатировать его так, как вы хотели (обратите внимание, что маска формата mm
предназначена для месяцев ; mi
для минут ), тогда вы можете сделать извлечение - снова из метки времени (не будет работать для даты):
SQL> with test (st, et) as
2 (select to_date('27.05.2020 00:52:48', 'dd.mm.yyyy hh24:mi:ss'),
3 to_date('27.05.2020 02:08:33', 'dd.mm.yyyy hh24:mi:ss')
4 from dual
5 ),
6 diff as
7 (select cast(et as timestamp) - cast(st as timestamp) diff
8 from test
9 )
10 select extract(hour from diff) ||':'||
11 extract(minute from diff) ||':'||
12 extract(second from diff) diff
13 from diff;
DIFF
-------------------------------------------------------------------------
1:15:45
SQL>
Вы можете сделать его красивее (например, две цифры для часов, используя функцию LPAD
). Или вы даже можете написать свою собственную функцию, которая фактически будет работать с разницей в DATE
значениях типов данных, выполнить некоторые вычисления (используя функцию trunc
, вычитания и т. Д.), Но приведенное выше выглядит красиво элегантно если по сравнению с самодельной функцией .