一个存储过程传入参数开始时间@startdate,结束时间@enddate 算出工作时间段(小时)
上班时间 上午9:00-12:00,下午1:30-17:30 
例如 参数@startdate='2011-3-19 9:00:00' @enddate='2011-3-20 15:30:00'
求出工作时间就该是 12 小时

解决方案 »

  1.   


    --创建函数(CSDN fredrickhu(小F)提供)CREATE FUNCTION f_WorkDay(     @dt_begin   datetime,     --计算的开始日期    @dt_end     datetime      --计算的结束日期)RETURNS   int AS BEGIN     DECLARE @workday int,@i int,@bz bit,@dt datetime     IF @dt_begin> @dt_end        SELECT @bz=1,@dt=@dt_begin,@dt_begin=@dt_end,@dt_end=@dt     ELSE        SET @bz=0     SELECT @i=DATEDIFF(Day,@dt_begin,@dt_end)+1, @workday=@i/7*5,            @dt_begin=DATEADD(Day,@i/7*7,@dt_begin)     WHILE  @dt_begin <=@dt_end     BEGIN        SELECT   @workday=CASE WHEN (@@DATEFIRST+DATEPART(Weekday,@dt_begin)-1)%7          BETWEEN 1 AND 5 THEN @workday+1 ELSE @workday END,                             @dt_begin=@dt_begin+1     END     RETURN(CASE WHEN @bz=1 THEN -@workday ELSE @workday END) END GO--测试示例select dbo.f_WorkDay('2011-02-22','2011-03-14') as '工作日'--运行结果/*工作日-----------15*/
      

  2.   

     开始时间 与 结束时间:可能同天同段;同天不同段;可能不同天 ...
     太多判断 期待大niu