Как найти разницу в минутах между двумя столбцами в Oracle, где тип данных обоих столбцов является меткой времени? - PullRequest
0 голосов
/ 30 сентября 2019

Как найти разницу в минутах между двумя столбцами в Oracle, где оба типа данных столбца являются метками времени? Мне нужно альтернативное решение для базы данных оракула для ниже postgres quary.

Ниже quary работает в postgresql.

выберите time_stamp, read_time, round (extract (эпоха из (time_stamp - read_time))) / 60) из имени таблицы

отметка времени, время чтения - два столбца.

Ответы [ 2 ]

1 голос
/ 30 сентября 2019

Данные испытаний :

CREATE TABLE test_data ( id, value1, value2 ) AS
  SELECT 1, TIMESTAMP '2019-09-30 00:00:00.000', TIMESTAMP '2019-09-30 00:05:00.000' FROM DUAL UNION ALL
  SELECT 2, TIMESTAMP '2019-09-30 00:00:00.100', TIMESTAMP '2019-09-30 00:05:00.000' FROM DUAL UNION ALL
  SELECT 3, TIMESTAMP '2019-09-30 00:00:00.000', TIMESTAMP '2019-10-01 00:05:00.000' FROM DUAL UNION ALL
  SELECT 4, TIMESTAMP '2019-09-30 00:00:00.001', TIMESTAMP '2019-10-01 00:05:00.000' FROM DUAL;

Разница составляет 5 минут, 5 минут минус несколько микросекунд, 1 день и 1 день минус микросекунда.

Запрос :

Если вы просто наивно используете DATE (используя CAST( value AS DATE) или TRUNC( value, 'SS' )), тогда вы получите неправильное значение, поскольку оно будет игнорировать любые доли секунды в вашемTIMESTAMP s;вместо этого вы можете найти разницу между TIMESTAMP s TRUNC с точностью до ближайшей минуты (использование TRUNC подразумевает неявное CAST для DATE типа данных), а затем добавить разницу между SECONDкомпоненты:

SELECT id,
       ROUND(
         ( TRUNC( value2, 'MI' ) - TRUNC( value1, 'MI' ) ) * 24 * 60
           + EXTRACT( SECOND FROM value2 ) / 60
           - EXTRACT( SECOND FROM value1 ) / 60,
         7
       ) AS time_difference_in_minutes
FROM   test_data;

Выход :

ID | TIME_DIFFERENCE_IN_MINUTES
-: | -------------------------:
 1 |                          5
 2 |                  4.9983333
 3 |                       1440
 4 |               1439.9999833

дБ <> скрипка здесь

0 голосов
/ 30 сентября 2019

При вычитании двух значений даты (которые также содержат компонент времени, часы / минуты / секунды - если это то, что вы называете «отметкой времени» - я полагаю, вы это делаете), то результатом будет количество дней между ними. Вот почему вы должны вычислить количество минут, умножив количество дней на 24 (как 24 часа в день) и 60 (как 60 минут в час).

Например:

SQL> create table test (a date, b date);

Table created.

SQL> insert into test values
  2    (to_date('30.09.2019 07:56', 'dd.mm.yyyy hh24:mi'),
  3     to_date('30.09.2019 08:14', 'dd.mm.yyyy hh24:mi')
  4    );

1 row created.

SQL> select
  2    b - a days,
  3    (b - a) * 24 hours,
  4    (b - a) * (24 * 60) minutes
  5  from test;

      DAYS      HOURS    MINUTES
---------- ---------- ----------
     ,0125         ,3         18

SQL>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...