«

时间累加去除非工作时间

发布于 阅读:91



--select top(50) * from PDM_WOMFGOrder order by enterdate desc
--select dateadd(second,2*60*60,'2020-01-06 12:10:13.577')
create function dateAddWork (@datex datetime,@t int)
returns datetime as
begin
declare @date datetime
set @date = @datex--'2020-01-06 18:10:13.577'
declare @hour int
set @hour =@t*60*60
declare @dates datetime
set @dates =  SUBSTRING(CONVERT(CHAR(23), @date, 121),0,11) 
--select @dates
declare @astart int
declare @as datetime
declare @aend int
declare @ae datetime
declare @atimes int
declare @pstart int
declare @ps datetime
declare @pend int
declare @pe datetime
declare @btimes int
declare @end int
declare @ee datetime
declare @vt datetime
set @astart = 8*60*60
set @as =  dateadd(second,@astart,@dates)
set @aend = 12*60*60
set @ae =  dateadd(second,@aend,@dates)
set @pstart = 14*60*60
set @ps =  dateadd(second,@pstart,@dates)
set @pend = 18*60*60
set @pe =  dateadd(second,@pend,@dates)
set @end = 24*60*60
set @ee =  dateadd(second,@end,@dates)
set @atimes= @aend -@astart
set @btimes= @pend - @pstart

--select @date as '@date',@dates  as '@dates',@as  as '@as',@ae  as '@ae',@ps  as '@ps',@pe  as '@pe',@ee  as '@@ee'
if @date  <=@as
    begin 
        --select '0-8'
        if @hour<=@atimes
         set @vt = DATEADD(second,@hour,@as)
        else
        set @vt = DATEADD(second,@hour-@atimes,@ps)
    end
else if @date>@as and @date <=@ae
    begin 
        --select '8-12'
        if datediff(second,@date,@ae) >= @hour
         set @vt = DATEADD(second,@hour,@date) 
        else 
         begin 
          if datediff(second,@date,@ae)+@btimes >= @hour
          set @vt = DATEADD(second,@hour-datediff(second,@date,@ae),@ps)
          else
           set @vt = DATEADD(second,@hour-datediff(second,@date,@ae)-@btimes,DATEADD(second,@astart,@ee))
         end
    end
else if @date>@ae and @date <=@ps
    begin 
        --select '12-14'
        if @hour<=@btimes
         set @vt = DATEADD(second,@hour,@ps)
         else
          set @vt = DATEADD(second,@hour-@btimes,DATEADD(second,@astart,@ee))
    end
else if @date>@ps and @date <=@pe
    begin 
        --select '14-18',@pend
        if datediff(second,@date,@pe) >= @hour
         set @vt = DATEADD(second,@hour,@date)
        else
        begin 
            if datediff(second,@date,@pe)+@atimes >= @hour
          set @vt = DATEADD(second,@hour-datediff(second,@date,@pe),DATEADD(second,@astart,@ee))
          else
           set @vt = DATEADD(second,@hour-datediff(second,@date,@pe)-@atimes,DATEADD(second,@pstart,@ee))
        end
    end 
else 
    begin 
        --select '18-24'
        if @hour<=@atimes
                begin 
                 set @vt = DATEADD(second,@hour,DATEADD(second,@astart,@ee))
                end
        else
        set @vt = DATEADD(second,@hour-@atimes,DATEADD(second,@pstart,@ee))
    end 
--select @vt
 return @vt
end

SQL