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_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';
我有一个 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_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';