fun_att_get_ottime

 

create function fun_att_get_ottime(
@empno as nvarchar(20),
@today as datetime,
@inORout as char(1))

returns varchar(5)

begin

 declare @sch_c int  
 
 declare @ot_in as varchar(5)
 declare @ot_out as varchar(5)

 select  @sch_c = count(*) from HR_ATTsch where convert(varchar(10), from_date, 120) = @today
 and patro_no = (select top 1 att_group from hrempa where empno = @empno)


 if(@sch_c = 0)
 begin
  select @ot_in = ot_in from HR_ATTdaily where convert(varchar(10), d_date, 120) = @today and empno = @empno
  select @ot_out = ot_out from HR_ATTdaily where convert(varchar(10), d_date, 120) = @today and empno = @empno

 end
 else --@sch_c > 0
 begin
  select @ot_in = mor_in from HR_ATTdaily where convert(varchar(10), d_date, 120) = @today and empno = @empno

  declare @mid_out varchar(5)
  select @ot_out = ot_out, @mid_out = mid_out from HR_ATTdaily where convert(varchar(10), d_date, 120) = @today and empno = @empno
  if @ot_out is null or @ot_out = ''
   set @ot_out = @mid_out
 end

 declare @r varchar(5)
 if @inORout = 'i'
  set @r = @ot_in
 else
  set @r = @ot_out

 return @r

end


 

 

 

 

 

 

 

 

CREATE function fun_att_wot_realtime(
@empno as nvarchar(20),
@today as datetime,
@efdate1 as datetime,
 @efdate2 as datetime)

returns varchar(100)
--對比加班時間和考勤時間,得出實際加班時長
begin
 declare @att_ot_in varchar(5)
 declare @att_ot_out varchar(5)
  
 set @att_ot_in = dbo.fun_att_get_ottime(@empno, @today, 'i')
 set @att_ot_out = dbo.fun_att_get_ottime(@empno, @today, 'o')
 
 if @att_ot_in is null and @att_ot_out is null
  return '0'


 declare @d_start datetime
 declare @d_end datetime
 declare @d_len nvarchar(4)
 
 declare @d1 as varchar(10)
 declare @d2 as varchar(10)
 set @d1 = convert(varchar(10), @efdate1, 120)
 set @d2 = convert(varchar(10), @efdate2, 120)

 
 declare @dt_att_ot_in datetime
 declare @dt_att_ot_out datetime
 
 set @dt_att_ot_in = @d1 + ' ' + @att_ot_in
 set @dt_att_ot_out = @d2 + ' ' +  @att_ot_out

 
 
 if @dt_att_ot_in > @efdate1
  set @d_start = @dt_att_ot_in
 else  
  set @d_start = @efdate1

 if @dt_att_ot_out < @efdate2 or @efdate2 = @efdate1
  set @d_end = @dt_att_ot_out
 else  
  set @d_end = @efdate2

 declare @m int
 set @m = DATEDIFF(minute, @d_start, @d_end)
 return cast((cast(@m as float) / cast(60 as float)) as numeric(9,2))
 
end

 

 

 


 

posted @ 2008-09-28 17:50  XGU_Winner  阅读(296)  评论(0编辑  收藏  举报