ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于时间维度表

关于时间维度表

原创 Linux操作系统 作者:magicgao8888 时间:2009-03-16 16:45:03 0 删除 编辑

在实施商业智能项目的时候最常用到的一个维度表就属时间维度表了。下面给出一个时间维度表的例子,并利用自定义函数为时间维度表填充数据。

  1. 创建一个时间维度表:

CREATE TABLE [dbo].[DATE_DIMENSION](
 [DateID] [int] NULL,
 [Date] [smalldatetime] NULL,
 [Year] [smallint] NULL,
 [Month] [tinyint] NULL,
 [WeekDay] [tinyint] NULL,
 [DayOfMonth] [tinyint] NULL,
 [Quarter] [tinyint] NULL,
 [MonthName] [varchar](9) NULL,
 [DayName] [varchar](9) NULL,
 [QuarterName] [varchar](6) NULL,
 [DayOfYear] [smallint] NULL

) ON [PRIMARY]

    2.     利用自定义函数为时间维度表填充数据:

自定义函数:

CREATE FUNCTION [dbo].[DATELIST] 
                (
                  @BEGIN_DATE AS DATETIME, 
                  @END_TIME   AS DATETIME
                ) 
RETURNS @TEMPTABLE  TABLE 
        ( 
   DateID   INT,
   Date    SMALLDATETIME,
   Year    SMALLINT,
   Month   TINYINT,
   WeekDay  TINYINT,
   DayOfMonth TINYINT,
   Quarter   TINYINT,
   MonthName  varchar     (9),
   DayName  varchar     (9),
   QuarterName varchar     (6),
   DayOfYear  smallint
        ) 
AS 
BEGIN 
     WHILE(@BEGIN_DATE<=@END_TIME)
         BEGIN
             INSERT INTO @TEMPTABLE(DateID,Date,Year,Month,WeekDay,DayOfMonth,Quarter,MonthName,DayName,QuarterName,DayOfYear)
    VALUES(
       CONVERT(INT,CONVERT(VARCHAR, @BEGIN_DATE, 112)),
       @BEGIN_DATE,
       DATEPART(YEAR,@BEGIN_DATE),
       DATEPART(MONTH,@BEGIN_DATE),
       DATEPART(DW,@BEGIN_DATE),
       DATEPART(D,@BEGIN_DATE),
       DATEPART(Q,@BEGIN_DATE),
       CASE DATEPART(MM,@BEGIN_DATE)
        WHEN 1 THEN 'January'   
        WHEN 2 THEN 'February'
        WHEN 3 THEN 'March'
        WHEN 4 THEN 'April'
        WHEN 5 THEN 'May'
        WHEN 6 THEN 'June'
        WHEN 7 THEN 'July'
        WHEN 8 THEN 'August'
        WHEN 9 THEN 'September'
        WHEN 10 THEN 'October'
        WHEN 11 THEN 'November'
        ELSE 'December'
       END,
       CASE DATEPART(DW,@BEGIN_DATE)
        WHEN 1 THEN 'Sunday'   
        WHEN 2 THEN 'Monday'
        WHEN 3 THEN 'Tuesday'
        WHEN 4 THEN 'Wednesday'
        WHEN 5 THEN 'Thursday'
        WHEN 6 THEN 'Friday'
        ELSE 'Saturday'
       END,
       CASE DATEPART(Q,@BEGIN_DATE)
        WHEN 1 THEN 'First'   
        WHEN 2 THEN 'Second'
        WHEN 3 THEN 'Third'
        ELSE 'Fourth'
       END,
       DATEPART(DY,@BEGIN_DATE)
       )
             SET @BEGIN_DATE=@BEGIN_DATE+1
         END 
    RETURN 
END 

测试:

SELECT * FROM DATELIST('20090101','20091231')

3-16-2009 4-53-52 PM.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14321372/viewspace-567541/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-03-10

  • 博文量
    35
  • 访问量
    73932