Просто впервые попал в Oracle. как найти разницу во времени между ниже в Oracle.

to_char(CAST(b.start_time AS DATE),'dd-MON-yy hh24:mi:ss') as start_time    
to_char(CAST(b.end_time AS DATE),'dd-MON-yy hh24:mi:ss')  as end_time

Мне нужно получить разницу во времени в часах и минутах для времени окончания и начала, значит (end_time - start_time).

Ценю твою помощь.

0
Love_Is_God 18 Янв 2022 в 16:15
2
Каковы типы данных ваших столбцов start_time и end_time?
 – 
Boneist
18 Янв 2022 в 16:22
@Bonest, спасибо за ваш ответ, на самом деле нижеприведенное работает, но я хочу получить часы и минуты. (CAST(( b.end_time ) AS DATE ) - CAST((b.start_time ) AS DATE )) * 24 * 60 AS Layove , (результат только в минутах)
 – 
Love_Is_God
18 Янв 2022 в 16:33
Кстати, TIMESTAMP(6) является типом данных обоих
 – 
Love_Is_God
18 Янв 2022 в 16:38

3 ответа

Просто делай

b.end_time - b.start_time

Результатом является значение INTERVAL DAY TO SECOND, см. INTERVAL

Чтобы получить часы и минуты, вы можете использовать SUBSTR / REGEX_SUBSTR / REGEXP_REPLACE или ДОПОЛНИТЕЛЬНО

REGEXP_REPLACE((b.end_time - b.start_time), '.*(\d{2}:\d{2}):\d{2}.*', '\1')

EXTRACT(HOUR FROM (b.end_time - b.start_time))||':'||EXTRACT(minute FROM (b.end_time - b.start_time))
0
Wernfried Domscheit 18 Янв 2022 в 16:43
Это не даст правильную разницу в часах и минутах, если время отличается более чем на 24 часа.
 – 
MT0
18 Янв 2022 в 17:20

Вы можете вычесть время в Oracle. Убедитесь, что ваш тип данных находится в формате Datetime и умножьте его на 24, чтобы получить часы и 24 * 60 для минут.

   (b.end_time - b.start_time) * 24    --For Hours
   (b.end_time - b.start_time) * 24*60 --For Minutes
0
waqar shahbaz 18 Янв 2022 в 16:47

Я беру 1970 год, а затем добавляю это с разницей между start_date_time и end_date_time с требуемым форматом -> hh24:mi:ss

Запрос

  SELECT
        TO_CHAR(TO_DATE('1970-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') +(TO_DATE('2022-01-18 21:00', 'YYYY-MM-DD hh24:mi') - TO_DATE
        ('2022-01-18 19:10', 'YYYY-MM-DD hh24:mi')), 'hh24:mi:ss') AS human_readable_format
    FROM
        DUAL;

Выход

0
SRM Kumar 18 Янв 2022 в 17:16
Это не работает, если разница во времени превышает 24 часа.
 – 
MT0
18 Янв 2022 в 17:18
Хорошо, я надеюсь, что вы получили решение.
 – 
SRM Kumar
18 Янв 2022 в 17:28