ERDS网校 - ERDS企业自主信息化培训,交流

查看: 321|回复: 0

计算两个日期之间的工作日

[复制链接]

80

主题

87

帖子

315

积分

版主

Rank: 7Rank: 7Rank: 7

积分
315
发表于 2015-10-16 15:10:49 | 显示全部楼层 |阅读模式

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


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|ERDS网校   点击这里给我发消息

快速回复 返回顶部 返回列表