我的表格如下
工人:
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数据库。
答案 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