oracle计算工时

Calculating work hours in oracle

我有一个 table 存储任务开始和结束的日期和时间,并根据工作小时数在月底支付款项。

任务持续时间从 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          |

但我现在不知道如何进行。 请哪位大侠帮忙

您只需减去日期并乘以 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';

由于 start_timeend_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';