zoukankan      html  css  js  c++  java
  • 【原创】分享一篇统计月份内的天数,工作天数、假日天数的脚本

    分享一篇日期数据脚本,主要统计出给定月份内的天数,工作天数、假日天数。

    --********************************************
    --
    本SQL文件生成指定年份的月份日期数据,
    --
    包括月份的天数、工作天数、假日天数
    --
    作者:TangQS
    --
    日期:2012-03-28
    --
    Microsoft SQL Server 2005
    --
    ********************************************
    if Object_id('MonthData') is not Null
    drop table MonthData;
    GO

    CREATE TABLE [dbo].[MonthData](
    [F_Month] [datetime] primary key,
    [F_DayCount] [smallint] NULL,
    [F_WorkDay] [smallint] NULL,
    [F_Holidays] [smallint] NULL,
    [F_Remark] [nvarchar](2000)
    );
    GO

    declare @mS datetime, @mE datetime, @YearEnd datetime;
    declare @W1 int, @D1 int;
    declare @W2 int, @D2 int;
    declare @DayCount int, @WorkDay int, @Holidays int;
    set @mS = '1990-01-01'; --开始年份
    set @YearEnd = '2030-12-01' --结束年份

    while @mS <= @YearEnd
    begin
      set @mE = dateadd(dd, -1, dateadd(mm, 1, @mS));
      set @W1 = datepart(week, @mS);
      set @D1 = datepart(weekday, @mS);
      set @W2 = datepart(week, @mE);
      set @D2 = datepart(weekday, @mE);
      set @DayCount = datediff(dd, @mS, @mE) +1;
      set @WorkDay = (@W2 - @W1 -1)*5 + (CASE @D1 WHEN 1 THEN 5 ELSE 7 - @D1 END) + (CASE @D2 WHEN 7 THEN 5 ELSE @D2 - 1 END);
      set @Holidays = (@W2 - @W1 -1)*2 + (CASE @D1 WHEN 1 THEN 2 ELSE 1 END) + (CASE @D2 WHEN 7 THEN 2 ELSE 1 END);
      insert into MonthData([F_Month], [F_DayCount], [F_WorkDay], [F_Holidays])
      select @mS as month, @DayCount as DayCount, @WorkDay AS WorkDay, @Holidays AS Holidays;
      set @mS = dateadd(mm, 1, @mS);
    end;
    GO

    /*

    F_Month F_DayCount F_WorkDay F_Holidays F_Remark
    ----------------------- ---------- --------- ---------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    2012-01-01 00:00:00.000 31 22 9 NULL
    2012-02-01 00:00:00.000 29 21 8 NULL
    2012-03-01 00:00:00.000 31 22 9 NULL
    2012-04-01 00:00:00.000 30 21 9 NULL
    2012-05-01 00:00:00.000 31 23 8 NULL
    2012-06-01 00:00:00.000 30 21 9 NULL
    2012-07-01 00:00:00.000 31 22 9 NULL
    2012-08-01 00:00:00.000 31 23 8 NULL
    2012-09-01 00:00:00.000 30 20 10 NULL
    2012-10-01 00:00:00.000 31 23 8 NULL
    2012-11-01 00:00:00.000 30 22 8 NULL
    2012-12-01 00:00:00.000 31 21 10 NULL

    */



  • 相关阅读:
    最优化方法(无约束)转载
    启动eclipse,弹出提示:java was started but returned exit code = 13
    前端开发之div实现table表格系列教程三:参数说明
    前端开发之div实现table表格系列教程二:拖动表格draggable
    前端开发之div实现table表格系列教程一:创建表格
    前端开发之弹出框系列教程十:通用参数说明
    前端开发之弹出框系列教程九:动画
    前端开发之弹出框系列教程八:自定义按钮栏
    前端开发之弹出框系列教程七:父页面与子窗口交互
    前端开发之弹出框系列教程六:win打开新窗口
  • 原文地址:https://www.cnblogs.com/tangqs/p/2422619.html
Copyright © 2011-2022 走看看