продолжительность между двумя столбцами в формате ччммсс - PullRequest
1 голос
/ 04 ноября 2019

Как определить разницу / длительность между двумя столбцами, имеющими следующий формат: ЧЧММСС.

Лидирующие нули проглатываются системой (БД Oracle). 0 часов - это «0». 3 часа - это «300». Часы 23:50 - это «235000».

Независимо от того, 24:00 также обозначается как «240000». Это означает, что у меня есть столбец «Начало» и столбец «Конец».

Как определить продолжительность, используя SQL?

Ответы [ 2 ]

2 голосов
/ 04 ноября 2019

Преобразуйте значения в секунды, используя арифметику:

select hhmmss, floor(hhmmss / 10000) * 60 * 60 + (mod(hhmmss, 10000) / 100) * 60 + mod(hhmmss, 100)
from (select 235000 as hhmmss from dual) x

Затем вычтите секунды. Это даст вам продолжительность в секундах.

С именами столбцов это будет выглядеть следующим образом:

select ( (floor(end / 10000) * 60 * 60 + (mod(end, 10000) / 100) * 60 + mod(end, 100)) -
         (floor(start / 10000) * 60 * 60 + (mod(start, 10000) / 100) * 60 + mod(start, 100))
       ) as diff_seconds

Чтобы преобразовать это обратно в строку, вы можете использовать to_char():

select to_char(date '2000-01-01' + diff_seconds * interval '1' second, 'HH24:MI:SS')
0 голосов
/ 04 ноября 2019

Вы можете достичь длительности в часах / минутах / секундах, используя to_date следующим образом:

Select round(
    (to_date(lpad(end,6,'0'),'HHMISS')
     - to_date(lpad(start,6,'0'),'HHMISS') ) * 24
     , 2) diff_in_hours 
       -- multiply it by another 60 to get diff in minutes (24*60)
       -- multiply it by another 3600 to get diff in seconds (24*3600)
  from your_table

Чтобы получить вывод в HHMISS, просто добавьте его в sysdate

Select
        TO_CHAR(Trunc(sysdate) + (to_date(lpad(end,6,'0'),'HHMISS')
         - to_date(lpad(start,6,'0'),'HHMISS')) , 'HH:MI:SS') as diff_HHMISS
      from your_table

Ура !!

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