declare @a datetime ,@end datetime,@hour int
set @a = '2009-2-23 10:10:3'
set @hour = 31set @end = (case when @hour > 10 then dateadd(hh,@hour%10,dateadd(dd,@hour/10,@a)) end)
select @end
/*
-----------------------
2009-02-26 11:10:03.000(1 row(s) affected)
*/

解决方案 »

  1.   


    用小时数除以10作为天数? dateadd的时候用天数来加?不过还是没看懂楼主的需求...
      

  2.   

    对增加的小时数做一个判断,如果是10的话,day就加1~~
      

  3.   

    谢谢
    我就是有个开始日期,形如'2009-3-19 15:00:00 000'
    因为生产需要算出他的结算时间,比如我一个订单需要三小时完成,这样他的结束时间就是'2009-3-19 18:00:00 000'
    ,然后下个订单的开始时间就是'2009-3-19 18:00:00 000',下个订单需要15小时完成,这可不能直接加啊
    因为一天只有上10小时班。DATEADD函数加小时数是以24小时才跳下一天,因为上班一天是10小时,所以就要改成10小时就会算到下一天去。
    最好时间能够控制在早上8点到下午18点,这样刚好10小时
      

  4.   

    4楼的方法基本可行,不需要case,直接查询就行了.declare @a datetime ,@end datetime,@hour int
    set @a = '2009-2-23 10:10:3'
    set @hour =10
    set @end = dateadd(hh,@hour%10,dateadd(dd,@hour/10,@a))
    select @end
      

  5.   

    好像写出来了只是方法好像有点笨拙。测试好像没问题,发出来请大家纠正。 DECLARE @fstartdate DATETIME,@hour INT
     SET @fstartdate='2009-3-10 09:00:00' SET @hour=51
      DECLARE @endDate DATETIME,@I INT,@addHour INT
      SET @addHour=1
      WHILE @addHour<=@hour
      BEGIN 
        PRINT @addHour
        SET @endDate=DATEADD(hh,1,@fstartdate)  --2009-03-11 19:00:00
        PRINT CONVERT(VARCHAR(20),@endDate,20)
        IF DATEADD(hh,1,@fstartdate)>=convert(VARCHAR(10),@fstartdate,126)+' 18:00:00'
          SET @endDate=DATEADD(hh,DATEDIFF(hh,CONVERT(DATETIME,convert(VARCHAR(10),@fstartdate,126)+' 18:00:00'),DATEADD(hh,1,@fstartdate)),CONVERT(VARCHAR(10),DATEADD(dd,1,@fstartdate),126)+' 08:00:00')
        SET @fstartdate=@endDate
        SET @addHour=@addHour+1
      END
      PRINT CONVERT(VARCHAR(20),@endDate,20)