zoukankan      html  css  js  c++  java
  • 日期维度表代码

    /** Alternate Date Creation Script using "Smart Keys" **/
    USE TEMPDB
    Go
    If Exists (Select Name from SysObjects where Name = 'AltDimDates')
      Drop Table AltDimDates
    Go
    CREATE TABLE [dbo].[AltDimDates](
        [DateKey] [int] NOT NULL PRIMARY KEY,
        [Date] [datetime] NOT NULL,
        [DateName] [nvarchar](50) NULL,
        [Month] [int] NOT NULL,
        [MonthName] [nvarchar](50) NOT NULL,
        [Quarter] [int] NOT NULL,
        [QuarterName] [nvarchar](50) NOT NULL,
        [Year] [int] NOT NULL,
        [YearName] [nvarchar](50) NOT NULL
    )
    Go
    -- Create variables to hold the start and end date
    Declare @StartDate datetime = '01/01/1990'
    Declare @EndDate datetime = '01/01/1995' 
    -- Use a while loop to add dates to the table
    Declare @DateInProcess datetime
    Declare @DayAsString varchar(2)  
    Declare @MonthAsString varchar(2)
    Declare @YearAsString varchar(4)
    Set @DateInProcess = @StartDate
    While @DateInProcess <= @EndDate
     Begin
     -- Extract strings for the Day, Month, and Year
    Set @DayAsString = Right('0' + Cast(Day(@DateInProcess) as varchar(2)), 2 ) 
    Set @MonthAsString =  Right('0' + Cast(Month(@DateInProcess) as varchar(2)), 2)  
    Set @YearAsString =  Cast(Year(@DateInProcess) as varchar(4)) 
     ---- Add a row into the date dimension table for this date
     Insert Into AltDimDates 
     ( [DateKey], [Date], [DateName], [Month], [MonthName], [Quarter], [QuarterName], [Year], [YearName] )
     Values ( 
        Cast( ( @YearAsString +  @MonthAsString  + @DayAsString) as int)
      , @DateInProcess -- [Date]
      , DateName( weekday, @DateInProcess ) + ', '  
        +  DateName( month, @DateInProcess )  + ', '  
        +  @DayAsString     + ', '  
        +   @YearAsString   -- [DateName]  
      , Month( @DateInProcess ) -- [Month]   
      , DateName( month, @DateInProcess ) -- [MonthName]
            + ' - ' + Cast( Year(@DateInProcess) as nVarchar(50) )
      , DateName( quarter, @DateInProcess ) -- [Quarter]
      , 'Q' + DateName( quarter, @DateInProcess )  -- [QuarterName] 
          + ' - ' + Cast( Year(@DateInProcess) as nVarchar(50) )
      , Year( @DateInProcess )
      , Cast( Year(@DateInProcess ) as nVarchar(4) ) -- [YearName] 
     )  
     -- Add a day and loop again
     Set @DateInProcess = DateAdd(d, 1, @DateInProcess)
     End
     
    -- 2e) Add additional lookup values to DimDates
    Insert Into [AltDimDates] 
      ( [DateKey]
      , [Date]
      , [DateName]
      , [Month]
      , [MonthName]
      , [Quarter]
      , [QuarterName]
      , [Year], [YearName] )
      Select 
        [DateKey] = -1
      , [Date] =  Cast('01/01/1900' as nVarchar(50) )
      , [DateName] = Cast('Unknown Day' as nVarchar(50) )
      , [Month] = -1
      , [MonthName] = Cast('Unknown Month' as nVarchar(50) )
      , [Quarter] =  -1
      , [QuarterName] = Cast('Unknown Quarter' as nVarchar(50) )
      , [Year] = -1
      , [YearName] = Cast('Unknown Year' as nVarchar(50) )
      Union
      Select 
        [DateKey] = -2
      , [Date] = Cast('01/01/1900' as nVarchar(50) )
      , [DateName] = Cast('Corrupt Day' as nVarchar(50) )
      , [Month] = -2
      , [MonthName] = Cast('Corrupt Month' as nVarchar(50) )
      , [Quarter] =  -2
      , [QuarterName] = Cast('Corrupt Quarter' as nVarchar(50) )
      , [Year] = -2
      , [YearName] = Cast('Corrupt Year' as nVarchar(50) )
    Go
    -- Check the tables data
    Select * from AltDimDates
  • 相关阅读:
    js 练习,点击计算三个数的最大值,省级联动
    CSS 笔记
    CSS练习
    Html 学习笔记
    MySQL 执行计划详解
    别人家的元数据系统是怎么设计的
    深入浅出Dubbo RPC
    算法的时间复杂度和空间复杂度详解
    序列化 & 反序列化
    MySQL的四种隔离级别
  • 原文地址:https://www.cnblogs.com/haseo/p/4287834.html
Copyright © 2011-2022 走看看