SQL 取时间差 去掉周末及非工作时间节假日
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 Festival_D=@Date_Temp
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 HH=@HH
----Festival 节日表