如何计算小时数?

时间:2009-11-08 17:29:35

标签: sql oracle function sum

我的表格如下

  

工人:

     

id integer

     

...

     

天:

     

id INTEGER

     

event_date DATE

     

worker_id INTEGER

  

小时

     

id INTEGER

     

hr_start VARCHAR2(8)

     

hr_stop VARCHAR2(8)

     

day_id INTEGER

我需要一个函数来计算数据库中的每个用户,当月的小时数。字段hr_start和hr_stop包含格式为hh:mi:ss的时间。我需要这个用于oracle数据库。

2 个答案:

答案 0 :(得分:3)

我在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

答案 1 :(得分:2)

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