2016-11-18 26 views
-1

私は、タスクの開始日時と終了日を格納するテーブルを持っており、作業時間数に基づいて月末に支払が行われます。oracleでの勤務時間の計算

タスクの所要時間は2時間から3日間です。

1日の作業時間は8時間です。

私は一日で働く時間数を見つける必要があります。私のDBに保存されている

データは、私は、合計時間は36:30時間である働いてもらうと5日と日に変換する必要があり、この

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 | 

のようなものです。

私のクエリを実行すると、私はこの出力を得ることができました。

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   | 

ですが、私は今、続行する方法を知らないと思います。 いくつかお手伝いください。

+1

。 time_diffの "time"が8:00:00未満の場合は、すべてのレコードについて、単に最も近い日に切り上げることを意味しますか? –

答えて

0

日付を減算して24を掛けると、時間がかかります。その後、8で割り、あなたはあなたの仕事日を得ます。

with d as (select sysdate end_date, sysdate - 2.4 as start_date from dual) 
select (end_date - start_date) * 3 from d; 

だからあなたの場合には、あなたが代わりにto_timestampto_dateを使用して値だけを引くことができます:あなたは3で掛けることができます実際には

with d as (select sysdate end_date, sysdate - 2.4 as start_date from dual) 
select (end_date - start_date) * 24/8 from d; 

あなたのクエリは次のとおりです。

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'; 
+0

'2.4'は何を意味し、なぜここで' sysdate'を使うのですか? –

+0

私は 'sysdateを例として使用します。これは 'to_date( '18112016 10:00'、 'ddmmyyyy hh:mm')'とto_date( '16112016 5:00'、 'ddmmyyyy hh:mm') 'に相当します。 @TonyRoczz私は答えを編集し、作業日にdiffを返すクエリを追加しました – Kacper

+0

私のために開始日と終了日はここからテーブルから取得します。 –

0

start_timeend_timeは、あなただけ行うことができますDATEタイプのように見えるので:それは5日間となりますなぜ私は理解していない

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'; 
関連する問題