• 递归插入的应用(生成日历数据)


    ALTER PROCEDURE usp_Calendar
    @StartDate DATE='2016-01-01',
    @EndDate DATE='2016-12-31'
    
    AS 
    BEGIN
    
    
    ---------b)建表----------------------------------------
    /*
    /****** Object:  Table [dbo].[Calendar]    Script Date: 2016/10/20 16:17:40 Created By Vison.Ding ******/
    SET ANSI_NULLS ON
    SET QUOTED_IDENTIFIER ON
    
    CREATE TABLE [dbo].[Calendar](
        [DateKey] int NOT NULL,
        [FullDateAlternateKey] date NOT NULL,
        [DayNumberOfWeek] tinyint NOT NULL,
        [DayNumberOfMonth] tinyint NOT NULL,
        [DayNumberOfYear] smallint NOT NULL,
        [WeekNumberOfYear] tinyint NOT NULL,
        [Week] NVARCHAR(3) NOT NULL,
        [MonthNumberOfYear] tinyint NOT NULL,
        [CalendarQuarter] tinyint NOT NULL,
        [CalendarYear] smallint NOT NULL,
        [CalendarSemester] tinyint NOT NULL,
        
     CONSTRAINT [PK_Calendar_DateKey] PRIMARY KEY CLUSTERED 
    (
        [DateKey] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
     CONSTRAINT [AK_Calendar_FullDateAlternateKey] UNIQUE NONCLUSTERED 
    (
        [FullDateAlternateKey] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    --*/
    
    
    
    ---------b)递归插入----------------------------------------
    --DECLARE @StartDate DATE='2016-01-01',
    --        @EndDate DATE='2016-12-31'
    
    ;WITH CTE(ID, [FullDateAlternateKey]) 
    AS
    (
    SELECT 1, CONVERT(DATE, @StartDate)
    UNION ALL
    
    SELECT ID+1, DATEADD(DD, 1, [FullDateAlternateKey])
      FROM CTE
     WHERE [FullDateAlternateKey] < @EndDate
    )
    
    INSERT INTO [Calendar]([DateKey], [FullDateAlternateKey], [DayNumberOfWeek], [DayNumberOfMonth], [DayNumberOfYear], [WeekNumberOfYear],
                           [Week], [MonthNumberOfYear], [CalendarQuarter], [CalendarYear], [CalendarSemester]
                           )
    SELECT REPLACE([FullDateAlternateKey], '-', '') AS [DateKey]
          ,[FullDateAlternateKey] 
          ,DATEPART(W, [FullDateAlternateKey]) AS [DayNumberOfWeek]     --一周中第几天
          ,DATEPART(DD, [FullDateAlternateKey]) AS [DayNumberOfMonth]   --多少号
          ,DATEPART(DY, [FullDateAlternateKey]) AS[DayNumberOfYear]        --一年中第多少天
          ,DATEPART(WEEK, [FullDateAlternateKey]) AS [WeekNumberOfYear] --第几周
          ,DATENAME(weekday, [FullDateAlternateKey])    AS [Week] --星期几
          ,DATEPART(MM, [FullDateAlternateKey]) AS [MonthNumberOfYear] --月份
          ,DATEPART(Q, [FullDateAlternateKey]) AS [CalendarQuarter] --季度
          ,DATEPART(YYYY, [FullDateAlternateKey]) AS [CalendarQuarter] --
          ,CASE WHEN DATEPART(Q, [FullDateAlternateKey]) IN(1, 2) THEN 1 
                WHEN DATEPART(Q, [FullDateAlternateKey]) IN(3, 4) THEN 2
            END AS [CalendarSemester]--半年
      FROM CTE OPTION (MAXRECURSION 0)
    
    
    END
    View Code
  • 相关阅读:
    计数排序
    CSS3变形
    前端内存泄露问题
    复杂对象的深拷贝
    JavaScript基本数据类型——Symbol
    随机打乱数组
    唯一重复的数字
    src和href的区别
    iframe的缺点
    link和@import的区别
  • 原文地址:https://www.cnblogs.com/sthinker/p/5986930.html
Copyright © 2020-2023  润新知