天天看點

2019年月曆假期添加

考勤統計中,一般都需要考慮到節假日資訊和調休的日期,每年12月份國家會頒布新一年的節假日資訊,我們可根據節假日資訊,維護成相關的日期表,用于日期維護。本文介紹下相關實作方式。

日期表的建立如下:

    CREATE TABLE [dbo].[HR_WorkDayList](

        [WorkDate] [varchar](10) NOT NULL,

        [DateType] [nvarchar](10) NULL,

        [IsWorkDay] [bit] NULL,

        [Remark] [nvarchar](20) NULL,

     CONSTRAINT [PK_HR_WorkDayList] PRIMARY KEY CLUSTERED

    (

        [WorkDate] ASC

    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

    ) ON [PRIMARY]

可根據系統表插入每年的日期清單,SQL腳本如下(可以一次性生成幾年内的日期清單,在系統設計中,我這裡生成了2018年-2028年的日期資料):

    INSERT INTO [dbo].[HR_WorkDayList](WorkDate,DateType,IsWorkDay,Remark) select WorkDate,DateType,IsWorkDay,Remark from

    (SELECT convert(char(10), DATEADD(dd, number, '2023-08-11'),120) AS WorkDate,

    datename(weekday,convert(char(10), DATEADD(dd, number, 2023-08-11),120)) as DateType,

    case when datename(weekday,convert(char(10), DATEADD(dd, number, 2023-08-11),120))<>'星期六' and datename(weekday,convert(char(10), DATEADD(dd, number, 2023-08-11),120))<>'星期日' then 1 else 0 end as IsWorkDay,

    '' as Remark

    FROM   master.dbo.spt_values  as spt

    WHERE   type = 'p' AND number <= DATEDIFF(DAY, '2023-08-11', '2028-12-31')) as SourceTable

根據每年國家釋出的節假日資訊,更新相關日期。采用Excel表格,組合成SQL腳本,然後更新表資料 。下表是我整理的2019年的節假日資訊。

日期           備注     是否上班     SQL腳本更新

2018-12-29           上班     1     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =1 ,[Remark] ='上班'WHERE WorkDate='2018-12-29'

2018-12-30           元旦     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='元旦'WHERE WorkDate='2018-12-30'

2018-12-31           元旦     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='元旦'WHERE WorkDate='2018-12-31'

2019-01-01           元旦     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='元旦'WHERE WorkDate='2019-01-01'

2019-02-03           上班     1     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =1 ,[Remark] ='上班'WHERE WorkDate='2019-02-03'

2019-02-03           上班     1     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =1 ,[Remark] ='上班'WHERE WorkDate='2019-02-03'

2019-02-04           春節     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='春節'WHERE WorkDate='2019-02-04'

2019-02-05           春節     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='春節'WHERE WorkDate='2019-02-05'

2019-02-06           春節     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='春節'WHERE WorkDate='2019-02-06'

2019-02-07           春節     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='春節'WHERE WorkDate='2019-02-07'

2019-02-08           春節     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='春節'WHERE WorkDate='2019-02-08'

2019-02-09           春節     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='春節'WHERE WorkDate='2019-02-09'

2019-02-10           春節     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='春節'WHERE WorkDate='2019-02-10'

2019-04-05           清明節     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='清明節'WHERE WorkDate='2019-04-05'

2019-04-06           清明節     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='清明節'WHERE WorkDate='2019-04-06'

2019-04-07           清明節     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='清明節'WHERE WorkDate='2019-04-07'

2019-05-01           勞動節     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='勞動節'WHERE WorkDate='2019-05-01'

2019-06-07           端午節     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='端午節'WHERE WorkDate='2019-06-07'

2019-06-08           端午節     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='端午節'WHERE WorkDate='2019-06-08'

2019-06-09           端午節     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='端午節'WHERE WorkDate='2019-06-09'

2019-09-13           中秋節     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='中秋節'WHERE WorkDate='2019-09-13'

2019-09-14           中秋節     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='中秋節'WHERE WorkDate='2019-09-14'

2019-09-15           中秋節     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='中秋節'WHERE WorkDate='2019-09-15'

2019-09-29           上班     1     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =1 ,[Remark] ='上班'WHERE WorkDate='2019-09-29'

2019-10-12           上班     1     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =1 ,[Remark] ='上班'WHERE WorkDate='2019-10-12'

2019-10-01           國慶節     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='國慶節'WHERE WorkDate='2019-10-01'

2019-10-02           國慶節     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='國慶節'WHERE WorkDate='2019-10-02'

2019-10-03           國慶節     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='國慶節'WHERE WorkDate='2019-10-03'

2019-10-04           國慶節     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='國慶節'WHERE WorkDate='2019-10-04'

2019-10-05           國慶節     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='國慶節'WHERE WorkDate='2019-10-05'

2019-10-06           國慶節     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='國慶節'WHERE WorkDate='2019-10-06'

2019-10-07           國慶節     0     UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='國慶節'WHERE WorkDate='2019-10-07'

在此基礎上,我們可以做月工作日天數統計,年工作日天數統計,以及年休息日統計,還有其他統計等。同時我們可以根據業務需要,用任何一門語言實作相關的業務需求。