declare @dt datetime
set @dt='2007-6-3'
select @dt as sur,dateadd(day,
case datepart(weekday,@dt) 
  when 1 then 3
  when 2 then 2
  when 3 then 2
  when 4 then 2
  when 5 then 4
  when 6 then 4
  when 7 then 3
end
,@dt
) as resultset @dt='2007-6-4'
select @dt as sur,dateadd(day,
case datepart(weekday,@dt) 
  when 1 then 3
  when 2 then 2
  when 3 then 2
  when 4 then 2
  when 5 then 4
  when 6 then 4
  when 7 then 3
end
,@dt
) as resultset @dt='2007-6-5'
select @dt as sur,dateadd(day,
case datepart(weekday,@dt) 
  when 1 then 3
  when 2 then 2
  when 3 then 2
  when 4 then 2
  when 5 then 4
  when 6 then 4
  when 7 then 3
end
,@dt
) as resultset @dt='2007-6-6'
select @dt as sur,dateadd(day,
case datepart(weekday,@dt) 
  when 1 then 3
  when 2 then 2
  when 3 then 2
  when 4 then 2
  when 5 then 4
  when 6 then 4
  when 7 then 3
end
,@dt
) as resultset @dt='2007-6-7'
select @dt as sur,dateadd(day,
case datepart(weekday,@dt) 
  when 1 then 3
  when 2 then 2
  when 3 then 2
  when 4 then 2
  when 5 then 4
  when 6 then 4
  when 7 then 3
end
,@dt
) as resultset @dt='2007-6-8'
select @dt as sur,dateadd(day,
case datepart(weekday,@dt) 
  when 1 then 3
  when 2 then 2
  when 3 then 2
  when 4 then 2
  when 5 then 4
  when 6 then 4
  when 7 then 3
end
,@dt
) as result

解决方案 »

  1.   

    以上只考虑周六周日select identity(int,1,1) as id into # from syscolumns where id < 100select * from #
    --至少记录大于3条以上declare @d datetime
    set @d = '2006-6-6'
    select top 1 d,datepart(dw,d)
    from (select dateAdd(day,ID,'2007-06-09') as d from #) a
    where datediff(d,@d,d) > 0 and datepart(dw,d) >1drop table #
      

  2.   

    谢谢Yang_,这个周六周末可以解决了,五一十一好像也可以用这个方法来解决,毕竟比较固定,不过好像还有长假之前的周末要上班的,这个是建立一个假日表来帮忙吗?