首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sql需求高效的求工作日,除去周六日,要高效率

2013-01-17 
sql需求高效率的求工作日,除去周六日,要高效率 ----此方法排除create function [dbo].[fn_test](@begin da

sql需求高效率的求工作日,除去周六日,要高效率
 ----此方法排除
create function [dbo].[fn_test]
(
@begin datetime --开始时间
,@end datetime  --结束时间

returns int       --返回工作日天数
As 
BEGIN 
declare @i int,@j int 
set @i=0 
set @j=0 
if @end> @begin   --如果结束时间大于开始时间
begin 
while dateadd(d,@i,@begin) <=@end    --当在开始时间增加天数仍然小于结束时间
begin    
if datepart(weekday,dateadd(d,@i,@begin)) not in(1,7) --当开始时间不在周日、周六时
begin
set @j=@j+1 
set @i=@i+1 
end
end 
end 
return @j 
END 




 
[解决办法]
你的写法也不差呀。只是进入了死循环。
把set @i=@i+1 放到外面就可以,如下:
if datepart(weekday,dateadd(d,@i,@begin)) not in(1,7) --当开始时间不在周日、周六时
begin
set @j=@j+1 
END
set @i=@i+1 

另外,记得set datefirst
不然1,7不一定代表星期六,日。

热点排行