2

我的表格如下

工人:

id 整数

...

天:

id 整数

event_date DATE

worker_id 整数

小时:

id 整数

hr_start VARCHAR2(8)

hr_stop VARCHAR2(8)

day_id 整数

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

4

2 回答 2

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
于 2009-11-08T23:38:35.407 回答
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

于 2009-11-08T17:37:08.607 回答