时间累加去除非工作时间
杰 发布于 阅读: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