Ну, это имеет смысл, только если все происходит в один и тот же день.Например:
SQL> create table test
2 (received_time varchar2(20),
3 processes_date date);
Table created.
SQL> insert into test values
2 ('1430', to_date('23.05.2018 16:10:00', 'dd.mm.yyyy hh24:mi:ss'));
1 row created.
SQL> insert into test values
2 ('1430', to_date('23.05.2018 18:10:00', 'dd.mm.yyyy hh24:mi:ss'));
1 row created.
SQL> insert into test values
2 ('1430', to_date('23.05.2018 14:50:00', 'dd.mm.yyyy hh24:mi:ss'));
1 row created.
SQL>
Если мы преобразуем RECEIVED_TIME в тип данных DATE, мы получим следующее:
SQL> select to_date(received_time, 'hh24mi') rectim,
2 processes_date
3 from test;
RECTIM PROCESSES_DATE
---------------- ----------------
01.05.2018 14:30 23.05.2018 16:10
01.05.2018 14:30 23.05.2018 18:10
01.05.2018 14:30 23.05.2018 14:50
SQL>
Ага;RECEIVED_TIME
конвертируется в первый день текущего месяца.Мы сделаем то же самое с PROCESSES_DATE
, используя комбинацию функций TO_DATE
и TO_CHAR
с соответствующими масками формата:
SQL> select to_date(received_time, 'hh24mi') rectim,
2 to_date(to_char(processes_date, 'hh24mi'), 'hh24mi') proctim
3 from test;
RECTIM PROCTIM
---------------- ----------------
01.05.2018 14:30 01.05.2018 16:10
01.05.2018 14:30 01.05.2018 18:10
01.05.2018 14:30 01.05.2018 14:50
SQL>
Nice;теперь мы можем сделать некоторые вычисления и посмотреть, какая строка заняла более 30 минут;Я округляю значения до 5 десятичных знаков, чтобы сэкономить место.Также обратите внимание, что я делаю это шаг за шагом, чтобы вы увидели, как мы доберемся до минут , потому что разница двух значений типа данных DATE составляет количество дней между ними:
SQL> with inter as
2 (select to_date(received_time, 'hh24mi') rectim,
3 to_date(to_char(processes_date, 'hh24mi'), 'hh24mi') proctim
4 from test
5 )
6 select
7 proctim,
8 rectim,
9 round(proctim - rectim, 5) days,
10 round((proctim - rectim) * 24, 5) hours,
11 round((proctim - rectim) * 26 * 60, 5) minutes
12 from inter;
PROCTIM RECTIM DAYS HOURS MINUTES
---------------- ---------------- ---------- ---------- ----------
01.05.2018 16:10 01.05.2018 14:30 ,06944 1,66667 108,33333
01.05.2018 18:10 01.05.2018 14:30 ,15278 3,66667 238,33333
01.05.2018 14:50 01.05.2018 14:30 ,01389 ,33333 21,66667
SQL>
Наконец, результат, который вы ищете:
SQL> with inter as
2 (select to_date(received_time, 'hh24mi') rectim,
3 to_date(to_char(processes_date, 'hh24mi'), 'hh24mi') proctim
4 from test
5 )
6 select
7 proctim,
8 rectim,
9 round((proctim - rectim) * 26 * 60, 5) minutes
10 from inter
11 where (proctim - rectim) * 26 * 60 > 30;
PROCTIM RECTIM MINUTES
---------------- ---------------- ----------
01.05.2018 16:10 01.05.2018 14:30 108,33333
01.05.2018 18:10 01.05.2018 14:30 238,33333
SQL>