我有一个表格,用于存储任务开始和结束的日期和时间,并根据月末工作的小时数计算。
任务持续时间从2小时到3天不等。
一天的工作时间是8小时。
我需要找到一天工作的小时数。
我的数据库中存储的数据就像这样
sno | start_time | end_time |
---------------------------------------------------
1 |06-10-2016 09:30:00 | 06-10-2016 17:00:00 |
2 |12-10-2016 08:00:00 | 15-10-2016 13:00:00 |
我需要获得36:30小时的总工作时间并将其转换为5天的天数。
当我运行查询时,我能够获得此输出。
sno | start_time | end_time | time_diff |
--------------------------------------------------------------------
1 |06-10-2016 09:30:00 | 06-10-2016 17:00:00| +00 07:30:00.000000|
2 |12-10-2016 08:00:00 | 15-10-2016 13:00:00| +03 05:00:00.000000|
我的查询:
SELECT DISTINCT sno, start_time,end_time,
TO_TIMESTAMP (end_time,'DD-MM-YYYY HH24:MI:SS') - TO_TIMESTAMP (start_time,'DD-MM-YYYY HH24:MI:SS') AS time_diff
FROM employee WHERE TO_CHAR((start_time),'MM-YYYY')='10-2016' AND emp_no ='18754';
我想要的输出是
|Total_no_days|
---------------
| 5 |
但我不知道现在该怎么办。 有人请帮忙。
答案 0 :(得分:0)
你可以减去日期并乘以24,这会给你几个小时。然后除以8,你得到你的工作日。
with d as (select sysdate end_date, sysdate - 2.4 as start_date from dual)
select (end_date - start_date) * 24 / 8 from d;
实际上你可以乘以3:
with d as (select sysdate end_date, sysdate - 2.4 as start_date from dual)
select (end_date - start_date) * 3 from d;
因此,在您的情况下,您可以使用to_date
代替to_timestamp
,只需减去值。
您的查询是:
SELECT DISTINCT sno, start_time,end_time,
(TO_DATE (end_time,'DD-MM-YYYY HH24:MI:SS') - TO_DATE(start_time,'DD-MM-YYYY HH24:MI:SS')) * 3 AS time_diff_work_days
FROM employee WHERE TO_CHAR((start_time),'MM-YYYY')='10-2016' AND emp_no ='18754';
答案 1 :(得分:0)
由于start_time
和end_time
似乎属于DATE
类型,您可以这样做:
SELECT SUM( end_time - start_time ) * 24 / 8 AS Total_no_days
FROM employee
WHERE start_time >= DATE '2016-10-01'
AND start_time < DATE '2016-11-01'
AND emp_no ='18754';