zoukankan      html  css  js  c++  java
  • 创建日期时间维度数据

    方式一、

    1建表:

    CREATE TABLE [dbo].[Dim_Date](
    	[DateKey] [int] NULL,					--日期编号
    	[Date] [datetime] NULL,					--日期
    	[Year] [float] NULL,					--年
    	[Month] [float] NULL,					--月
    	[Month EN] [nvarchar](50) NULL,			--月【英文表示】
    	[Month Short EN] [nvarchar](50) NULL,	--月【英文表示简称】
    	[Month CN] [nvarchar](50) NULL,			--月【中文表示】
    	[Day] [float] NULL,						--天
    	[Quarter] [float] NULL,					--季度
    	[Quarter EN] [nvarchar](50) NULL,		--季度【英文表示】	
    	[Quarter CN] [nvarchar](50) NULL,		--季度【中文表示】
    	[Weekday] [float] NULL,					--周
    	[Weekday CN] [nvarchar](50) NULL,		--周【中文表示】
    	[Weekday Short EN] [nvarchar](50) NULL,	--周【英文简称表示】
    	[Week of Year] [float] NULL,			--一年中的第几周
    	[Day of Year] [float] NULL,				--一年中的第几天
    	[SemiYearly] [nvarchar](50) NULL,		--半年
    	[Period of Ten Days] [nvarchar](10) NULL,--旬【中文表示】
    	[Period of Index] [nvarchar](2) NULL,	--旬【英文表示】
    	[Weekend] [nvarchar](5) NULL			--工作日
    ) ON [PRIMARY]
    
    GO
    
    

     2.建存储过程

    SET DATEFIRST 7 --设周日为每周的第一天
    GO
    --向日期表插入数据
    DECLARE @b1 DATETIME
    set @b1='2000-01-01'     --设置起始日期 
     
    WHILE @b1<'2014-01-01'   --设置截止日期
    BEGIN
     INSERT INTO dbo.[Dim_Date] (
      [DateKey],
      [Date], 
      [Year],
      [Month],
      [Month EN],
      [Month Short EN],
      [Month CN],
      [Day],
      [Quarter],
      [Quarter EN],
      [Quarter CN],
      [Weekday],
      [Weekday CN],
      [Weekday Short EN],
      [Week of Year],
      [Day of Year],
      [SemiYearly],
      [Period of Ten Days],
      [Period of Index] ,
      [Weekend]
     ) 
     VALUES( 
       CONVERT(NVARCHAR(10),@b1,112),  --DateKey 1
       @b1, --Date 2
       DATEPART(year, @b1), --Year 3
       DATEPART(month, @b1), --Month 4
       CASE --Month EN 5
         when (DATEPART(month, @b1))='1' then 'January' 
         when (DATEPART(month, @b1))='2' then 'February'
         when (DATEPART(month, @b1))='3' then 'March'
         when (DATEPART(month, @b1))='4' then 'April'
         when (DATEPART(month, @b1))='5' then 'May'
         when (DATEPART(month, @b1))='6' then 'June'
         when (DATEPART(month, @b1))='7' then 'July'
         when (DATEPART(month, @b1))='8' then 'August'
         when (DATEPART(month, @b1))='9' then 'September'
         when (DATEPART(month, @b1))='10' then 'October'
         when (DATEPART(month, @b1))='11' then 'November'
         else 'December'
       END, 
       CASE --Month Short En 6
        when (DATEPART(month, @b1))='1' then 'Jan' 
        when (DATEPART(month, @b1))='2' then 'Feb'
        when (DATEPART(month, @b1))='3' then 'Mar'
        when (DATEPART(month, @b1))='4' then 'Apr'
        when (DATEPART(month, @b1))='5' then 'May'
        when (DATEPART(month, @b1))='6' then 'Jun'
        when (DATEPART(month, @b1))='7' then 'Jul'
        when (DATEPART(month, @b1))='8' then 'Aug'
        when (DATEPART(month, @b1))='9' then 'Sep'
        when (DATEPART(month, @b1))='10' then 'Oct'
        when (DATEPART(month, @b1))='11' then  'Nov'
        else 'Dec'
       END,
          CASE --Month CN 7
           when (DATEPART(month, @b1))='1' then N'一月' 
        when (DATEPART(month, @b1))='2' then N'二月'
        when (DATEPART(month, @b1))='3' then N'三月'
        when (DATEPART(month, @b1))='4' then N'四月'
        when (DATEPART(month, @b1))='5' then N'五月'
        when (DATEPART(month, @b1))='6' then N'六月'
        when (DATEPART(month, @b1))='7' then N'七月'
        when (DATEPART(month, @b1))='8' then N'八月'
        when (DATEPART(month, @b1))='9' then N'九月'
        when (DATEPART(month, @b1))='10' then N'十月'
        when (DATEPART(month, @b1))='11' then  N'十一月'
        else N'十二月'
       END,
       DATEPART(day, @b1),--day  8
       DATEName (qq, @b1),--quarter 9
       CASE   --quarter en  10
        when DATEName (qq, @b1)='1' then 'Q1'
        when DATEName (qq, @b1)='2' then 'Q2' 
        when DATEName (qq, @b1)='3' then 'Q3'
        else  'Q4'
       END,
             CASE  --quarter cn  11
        when DATEName (qq, @b1)='1' then N'一季度'
        when DATEName (qq, @b1)='2' then N'二季度' 
        when DATEName (qq, @b1)='3' then N'三季度'
        else  N'四季度'
       END,    
       DATEPART(dw, @b1),--Weekday 12
       CASE --Weekday CN  13
        when DATEPART(dw, @b1)=1 then  N'星期日'
        when DATEPART(dw, @b1)=2 then  N'星期一'
        when DATEPART(dw, @b1)=3 then  N'星期二'
        when DATEPART(dw, @b1)=4 then  N'星期三'
        when DATEPART(dw, @b1)=5 then  N'星期四'
        when DATEPART(dw, @b1)=6 then  N'星期五'  
        else N'星期六'
       END,
       CASE --Weekday Short EN 14  --注意,周日是第一天.
        when DATEPART(dw, @b1)='1' then 'Sun'
        when DATEPART(dw, @b1)='2' then 'Mon'
        when DATEPART(dw, @b1)='3' then 'Tue'
        when DATEPART(dw, @b1)='4' then 'Wed'
        when DATEPART(dw, @b1)='5' then 'Thu'
        when DATEPART(dw, @b1)='6' then 'Fri'
        else 'Sat'
       END, 
       DATEName (wk, @b1),--week of year 15
       DATEName (dy, @b1),--day of year  16
       CASE --SemiYearly 17
        when DATEPART(month, @b1)<=6 then N'上半年'
        else N'下半年'
       END,
          CASE  --Period of Ten Days 18
        when DATEName (dd, @b1)<=10 then N'上旬' 
        when DATEName (dd, @b1)>20  then N'下旬'
        else N'中旬'
       END,
          CASE  --Period of Ten Days 19
        when DATEName (dd, @b1)<=10 then N'1' 
        when DATEName (dd, @b1)>20  then N'3'
        else N'2'
       END,
       CASE --Is it Weekend? 20
        when DATEPART(dw, @b1)='1' then '周末'
        when DATEPART(dw, @b1)='7' then '周末'
        else '平时'
       END 
    )
    --日期加1天
     set @b1=DATEADD(day, 1, @b1)
    END
    GO
    

     方式二、

    -- 上面生成日期,下边用视图生成 年、半年、季、月、日等
    go
    create table tbl_MetaData_Date
    (
    [Date] [datetime] NOT NULL,
    [Ten_Days] [datetime] NULL,
    [Half_Year] [datetime] NULL
    ) ON [PRIMARY]
    go

     
    create view v_metadata_date
    as
    select date, year(date) as year, month(date) as month, day(date) as day, case when datepart(weekday, date) = 1 then datediff(wk, convert(datetime,
    dateadd(yy, datediff(yy, 0, date), 0)), date) when datepart(weekday, date) > 1 then datediff(wk, convert(datetime, dateadd(yy, datediff(yy, 0,
    date), 0)), date) + 1 end as week, { fn quarter(date) } as quarter, ten_days, half_year, date as dayne
    from tbl_MetaData_Date
    go

  • 相关阅读:
    ASP.NET MVC 3 新特性
    C#用WebClient下载File时操作超时的问题
    用C# 实现 Zen Cart 的用户密码加密算法
    ASP.NET MVC 局部缓存实现 用户控件缓存 Partial Output Caching
    关于MarshalByRefObject的解释
    文件的上传和下载
    浅谈三维GIS的应用之三维管线
    Python:处理不是经由EXPORT出來的Windows日志
    python :简单邮件发送
    日志文件分割:将包含不同关键字的行写入到不同的文件
  • 原文地址:https://www.cnblogs.com/emmy/p/2029562.html
Copyright © 2011-2022 走看看