CREATE proc s_Time_diff ----s_Time_diff '2014/5/30 16:00' ,'2014/6/4 9:00'
@Date_From nvarchar(40), @Date_End nvarchar(40) as declare @DateF datetime,@DateE datetime,@MI int,@work_From datetime,@work_End datetime ,@HH decimal(18,2),@Date_Temp datetime,@DD int,@Num int,@Num_W int select @DateF=convert(char(4),DATEPART(YYYY,@Date_From))+'/'+convert(char(2),DATEPART(MM,@Date_From))+'/'+convert(char(2),DATEPART(DD,@Date_From)) select @DateE=convert(char(4),DATEPART(YYYY,@Date_End))+'/'+convert(char(2),DATEPART(MM,@Date_End))+'/'+convert(char(2),DATEPART(DD,@Date_End)) select @HH=0 if(@DateF=@DateE)---起讫时间同一天 begin select @MI=DATEDIFF(Mi,@Date_From,@Date_End) end if(@DateF<>@DateE)---起讫时间不是同一天 begin select @work_From=convert(datetime,@DateE+' '+'8:30') select @work_End=convert(datetime,@DateF+' '+'17:00') select @Date_Temp=dateadd(dd,1,@DateF) select @MI=DATEDIFF(Mi,@Date_From,@work_End) while(@Date_Temp<@DateE) begin select @Num=COUNT(*) from Festival where select @Num_W=datepart(weekday,@Date_Temp) print @Num_W if(@Num>0 or @Num_W=1 or @Num_W=7)---节假日 begin select @HH=@HH+0 end else begin select @HH=@HH+24 end select @Date_Temp=dateadd(dd,1,@Date_Temp) print @Date_Temp print @DateE select @Num=0 end if(@Date_Temp=@DateE) begin select @MI+=DATEDIFF(Mi,@work_From,@Date_End) end end select @HH=@HH+convert(decimal,@MI)/60 select ----Festival 节日表