sql 计算法定假节假日解决方案一 - Go语言中文社区

sql 计算法定假节假日解决方案一


最近在做请假单,请假时长需要去掉法定假日和公休假,法定假日我不会算网上也没找到类似的资料难过

所以我打算创建一个表,自动根据年份条件生成公休假,然后手动编辑添加法定假日。

然后再用它去关联请假数据得出实际请假时长。


下面就是根据年份生成的公休假日期。

DECLARE @Work_LegalHoliday TABLE
    (
      ID VARCHAR(36) ,
      DateTimeName DATETIME ,
      WeekName VARCHAR(50) ,
      IsLegalHoliday INT ,
      Remark NVARCHAR(MAX)
    )


DECLARE @Year INT

SET @Year = 2015
--
;
WITH    tbSource
          AS ( SELECT   CAST(RTRIM(@Year) + '-01-01' AS DATETIME) DateTimeName
               UNION ALL
               SELECT   DATEADD(dd, 1, DateTimeName)
               FROM     tbSource
               WHERE    DATEPART(yy, DATEADD(dd, 1, DateTimeName)) = @Year
             )
    INSERT  @Work_LegalHoliday
            SELECT  NEWID() ,
                    CONVERT(VARCHAR(10), DateTimeName, 121) ,
                    DATENAME(WEEKDAY, DateTimeName) ,
                    0 ,--不是法定假日
                    '' AS Remark
            FROM    tbSource a
            WHERE   DATEPART(WEEKDAY, a.DateTimeName) = 1
                    OR DATEPART(WEEKDAY, a.DateTimeName) = 7
            EXCEPT
            SELECT  NEWID() ,
                    CONVERT(VARCHAR(10), DateTimeName, 121) ,
                    DATENAME(WEEKDAY, DateTimeName) ,
                    0 ,
                    '' AS Remark
            FROM    @Work_LegalHoliday
    OPTION  ( MAXRECURSION 0 )
SELECT  *
FROM    @Work_LegalHoliday

生成结果如下:


生成这个结果后,再去编辑或添加法定假日。

然后再用请假数据关联该表

SELECT   a.ID ,
                        a.LeaveStartTime ,
                        a.LeaveEndTime ,
                        b.IsLegalHoliday ,
                        CASE WHEN b.WeekName = '星期六'
                                  OR b.WeekName = '星期日' THEN '是'
                             ELSE '否'
                        END IsWeekend
               FROM     dbo.Work_Leave a
                        LEFT JOIN dbo.Work_LegalHoliday b ON b.DateTimeName >= a.LeaveStartTime
                                                             AND b.DateTimeName <= a.LeaveEndTime

这是每条记录关联出来的请假时段中包含公休假和法定假的详细记录,然后根据条件进行统计就是了。



版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/u012725119/article/details/46853883
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-04-19 12:23:38
  • 阅读 ( 1102 )
  • 分类:算法

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢