как посчитать сумму часов?

Мои таблицы следующие

рабочие:

идентификатор целое число

...

дни:

идентификатор INTEGER

событие_дата ДАТА

worker_id ЦЕЛОЕ ЧИСЛО

и

часы:

идентификатор INTEGER

hr_start VARCHAR2(8)

hr_stop VARCHAR2(8)

day_id ЦЕЛОЕ ЧИСЛО

Мне нужна функция, которая будет вычислять для каждого пользователя в базе данных сумму часов в текущем месяце. Поля hr_start и hr_stop содержат время в формате чч:ми:сс. Мне нужно это для базы данных оракула.


person szaman    schedule 08.11.2009    source источник
comment
Я думаю, вам нужно написать один, и если вы потерпите неудачу, позвольте нам помочь вам.   -  person Dani    schedule 08.11.2009


Ответы (2)


Я создал эти тестовые таблицы в своей базе данных 10g XE, и этот запрос должен дать то, что вы ищете.

select worker_id,
       sum(hrs)
  from (select worker_id, 
               (to_date(hr_stop, 'hh24:mi:ss') - to_date(hr_start, 'hh24:mi:ss')) * 24 hrs
          from days d,
               hours h
         where d.id = h.day_id
           and trunc(event_date, 'mm') = trunc(sysdate, 'mm')
       )
group by worker_id
person Doug Porter    schedule 08.11.2009

SELECT w.id, SUM(DATEDIFF(h, hr_start, hr_end))
FROM workers w
INNER JOIN days d ON w.id = d.worker_id
INNER JOIN hours h ON d.id = h.day_id
GROUP BY w.id

Извините, я знаю только SQL Server. Вы можете попробовать использовать связанный пример ниже, чтобы рассчитать количество часов путем вычитания и округления.

http://www.orafaq.com/faq/how_does_one_get_the_time_difference_between_two_date_columns

person AverageAdam    schedule 08.11.2009
comment
datediff не является допустимой функцией Oracle. Это хорошая ссылка на то, как обрабатывать столбцы даты в Oracle. - person Doug Porter; 09.11.2009