2 5 3 工作日處理函式 標準節假日 sql

2021-04-21 02:03:46 字數 1834 閱讀 7367

if exists (select * from dbo.sysobjects where id = object_id(n'[dbo].[f_workday]') and xtype in (n'fn', n'if', n'tf'))

drop function [dbo].[f_workday]

go--計算兩個日期相差的工作天數

create function f_workday(

@dt_begin datetime,  --計算的開始日期

@dt_end  datetime    --計算的結束日期

)returns int

asbegin

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

endreturn(case when @bz=1 then -@workday else @workday end)

endgo

if exists (select * from dbo.sysobjects where id = object_id(n'[dbo].[f_workdayadd]') and xtype in (n'fn', n'if', n'tf'))

drop function [dbo].[f_workdayadd]

go--在指定日期上,增加指定工作天數後的日期

create function f_workdayadd(

@date    datetime,  --基礎日期

@workday int       --要增加的工作日數

)returns datetime

asbegin

declare @bz int

--增加整週的天數

select @bz=case when @workday<0 then -1 else 1 end

,@date=dateadd(week,@workday/5,@date)

,@workday=@workday%5

--增加不是整週的工作天數

while @workday<>0

select @date=dateadd(day,@bz,@date),

@workday=case when (@@datefirst+datepart(weekday,@date)-1)%7 between 1 and 5

then @workday-@bz else @workday end

--避免處理後的日期停留在非工作日上

while (@@datefirst+datepart(weekday,@date)-1)%7 in(0,6)

set @date=dateadd(day,@bz,@date)

return(@date)

end

計算有效工作日(跳過節假日)

在實際開發過程中,我們很多時候會遇到節假日處理的問題。由於前段時間工作需要,所以通過各種平台蒐集資料,整理出下面的 備註 主要是給定乙個初始日期,然後給定乙個時間範圍,要求自動跳過節假日以及雙休日,最後返回乙個工作日的日期,具體 如下 根據指定日期,計算出給定時間間隔的下乙個工作日的日期 給定的日期...

是否是工作日和節假日判定

根據節假日表分析當前日期是否屬於節假日配置表的時間以及判定當前日期是否屬於雙休日 首先建一張節假日表pricingholiday id 節假日時間 hdate 是否工作日 htype 2表示不上班 非工作日,1表示正常上班 工作日 判定 private string strworkingdayam ...

是否是工作日和節假日判定

根據節假日表分析當前日期是否屬於節假日配置表的時間以及判定當前日期是否屬於雙休日 首先建一張節假日表pricingholiday id 節假日時間 hdate 是否工作日 htype 2表示不上班 非工作日,1表示正常上班 工作日 判定 private string strworkingdayam ...