2017-07-19 12 views
0

特定の日付基準の間に表示される総勤務時間を合計しようとしています。私は毎日の勤務時間を検索しました。今では、ある範囲の日付を繰り返し、勤務時間と分を合計したいと考えています。ここでループを使用して複数のhh24:mi値の合計を取得する

は、私が開発しようとしています方法です:

create or replace FUNCTION GET_Working_hrs_Total (ecd in number,start_dt in DATE,end_dt in date,stdin IN VARCHAR2,stdout in VARCHAR2) 
RETURN varchar2 AS 
-- 
hrs varchar2(1000); 
temp_date date; 
-- 
BEGIN 

temp_date :=start_dt; 

while temp_date <=end_dt 
LOOP 

select olphrm.get_std_hrs(ecd,temp_date,stdin,stdout)--It will return the working hours of date passed for example 8:30 i.e. 8 hours 30 minutes 
into hrs from dual;--I want to get the count of Total working hours in this variable 

temp_date :=temp_date+1;--switch to next day 
END LOOP; 

     return hrs;   

END; 

どのように私は夜04時30すなわち16時間30分のような形式で、総労働時間と分を達成することができますか?

答えて

0

試してみてください。

次のコードは、私の仕事:@ JohnHcの答えの変更のいくつかの後

create or replace FUNCTION GET_Working_hrs_Total (ecd in number,start_dt in DATE,end_dt in date,stdin IN VARCHAR2,stdout in VARCHAR2) 
RETURN varchar2 AS 
-- 
v_hours number(3,0) := 0; -- We'll put hours in here 
v_mins number(6,0) := 0; -- An mins in here 
hrs varchar2(1000); 
temp_date date; 
-- 
BEGIN 

temp_date :=start_dt; 

while temp_date <=end_dt 
LOOP 


select t-_number(to_char(olphrm.get_std_hrs(ecd,temp_date,stdin,stdout), 'HH24'), '999') + v_hours 
into v_hours 
from dual; -- Add new hours to old hours 



select to_number(to_char(olphrm.get_std_hrs(ecd,temp_date,stdin,stdout), 'MI'), '999') + v_mins into v_mins from dual; -- Add new mins to old mins 

temp_date :=temp_date+1; 

END LOOP; 

v_hours := v_hours + floor(v_mins/60); -- Add mins to hours 

v_mins := mod(v_mins, 60); -- and ditch the hours from mins 

hrs:= to_char(v_hours, '999') ||':'||to_char(v_mins,'99'); -- create the varchar to return 

     return hrs;   

END; 
+0

大丈夫...私はそれを試してみましょう。.. –

+0

char値を数値に追加することができないため、機能しません。 –

+0

@AlinaAnjum編集を参照してください、私は 'to_char()'の周りに 'to_number()'を追加しました。それはかなりではありませんが、それは動作するはずです – JohnHC

1

create or replace FUNCTION GET_Working_hrs_Total (ecd in number,start_dt in DATE,end_dt in date,stdin IN VARCHAR2,stdout in VARCHAR2) 
RETURN varchar2 AS 
-- 
v_hours number(3,0) := 0; -- We'll put hours in here 
v_mins number(6,0) := 0; -- An mins in here 
hrs varchar2(1000); 
temp_date date; 
-- 
BEGIN 

temp_date :=start_dt; 

while temp_date <=end_dt 
LOOP 

SELECT EXTRACT(hour FROM to_timestamp(olphrm.GET_Working_hrs(ecd,temp_date,stdin,stdout), 'hh24:mi')) + v_hours 
into v_hours from dual; -- Add new hours to old hours 


SELECT EXTRACT(MINUTE FROM to_timestamp(olphrm.GET_Working_hrs(ecd,temp_date,stdin,stdout), 'hh24:mi')) + v_mins 
into v_mins from dual;-- Add new mins to old mins 


temp_date :=temp_date+1; 

END LOOP; 

v_hours := v_hours + floor(v_mins/60); -- Add mins to hours 

v_mins := mod(v_mins, 60); -- and ditch the hours from mins 

hrs:= to_char(v_hours, '999') ||':'||to_char(v_mins,'99'); -- create the varchar to return 

     return hrs;   

END; 
関連する問題