Как получить разницу во времени между двумя датами, где даты хранятся в 12-часовом формате в Oracle? - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть две даты: Date1: 20-Mar-2020 07:35:00 PM и Date2: 20-Mar-2020 02:42:00 PM

Я написал запрос:

SELECT     ROUND(minutes / 60, 2) || ' Hours ' 
FROM     ( SELECT  (Date1 - to_date(Date2, 'DD-MON-YYYY HH12:MI:SS')) * 24 * 60     AS minutes
  FROM     dual
);

Но я не получаю желаемый результат, это отображает 19,58 часов, что неправильно, пожалуйста, поправьте меня, куда я иду Неправильно?

1 Ответ

1 голос
/ 08 апреля 2020

Как прокомментировал Mat, вам нужно преобразовать обе строки в дату, а затем вычесть их:

to_date(date1, 'dd-mon-yyyy hh12:mi:ss am') - to_date(date2, 'dd-mon-yyyy hh12:mi:ss am')

Обратите внимание, что в вашем спецификаторе формата отсутствует часть am.

This выдает результат в виде десятичного числа дней, который затем можно преобразовать в th-часов, умножив его на 24:

round(
    ( 
        to_date(date1, 'dd-mon-yyyy hh12:mi:ss am') 
        - to_date(date2, 'dd-mon-yyyy hh12:mi:ss am')
    ) * 24, 
    2
) || ' hours'

Демонстрация на DB Fiddle :

select round(
    (
        to_date('20-Mar-2020 07:35:00 PM', 'dd-mon-yyyy hh12:mi:ss am') 
        - to_date('20-Mar-2020 02:42:00 PM', 'dd-mon-yyyy hh12:mi:ss am')
    ) * 24, 
    2
) || ' hours' res
from dual
| RES        |
| :--------- |
| 4.88 hours |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...