SQL Server 计算两个日期间的工作日(排除周六和周日,不排除节假日)

分类:SQL     发布:2019-08-15     来源:本站     浏览:727 次
CREATE FUNCTION GetWorkDays
    (
      @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
GO
 
--测试示例
SELECT  dbo.GetWorkDays('2019-08-1', '2019-08-31') AS '工作日' 
        

如果觉得文章对您有帮助,您可以对我进行打赏 ¥0.64 元(金额随机^_^,每次刷新金额不同)。

请使用支付宝扫码支付

留言评论

*称  呼:
*联系方式: 方便与您取得联系,推荐使用邮箱。
*内  容:

已有评论

暂无数据

上一篇:SQL Server 索引碎片整理

下一篇:SQL Server 按月份输出日历