【MySQL】时间维度表和存储过程创建

MySQL时间维度表和存储过程创建

第一步:先建表:

CREATE TABLE IF NOT EXISTS T_TIME_DIM(
     DATE DATE DEFAULT NULL,
     ID INT(11) NOT NULL,
     YYYY SMALLINT(6) DEFAULT NULL,
     MM SMALLINT(6) DEFAULT NULL,
     DD SMALLINT(6) DEFAULT NULL,
     YYYYWW SMALLINT(6) DEFAULT NULL,
     WEEK_NO SMALLINT(6) DEFAULT NULL,
     QTR SMALLINT(6) DEFAULT NULL,
     WEEK_DAY SMALLINT(6) DEFAULT NULL,
     MM_NAME CHAR(10) DEFAULT NULL,
     WD_NAME CHAR(10) DEFAULT NULL,
 PRIMARY KEY (id))
 ENGINE = INNODB DEFAULT CHARSET = utf8;
第二步:创建存储过程:

CREATE PROCEDURE SP_TIME_DIM(IN BEG_DATE DATE,IN END_DATE DATE)    
    BEGIN
        declare v_curdate DATE;
        declare v_begin_date date;
        declare v_end_date date;
        
        set v_begin_date = BEG_DATE;
        set v_end_date = END_DATE;
        set v_curdate = v_begin_date;
        
        WHILE v_curdate <= v_end_date DO
        
        INSERT INTO T_TIME_DIM
        SELECT 
            v_curdate as date,
            DATE_FORMAT(v_curdate, '%Y%m%d') AS ID,
            YEAR(v_curdate) AS YYYY,
            MONTH(v_curdate) AS MM,
            DAY(v_curdate) AS DD,
            DATE_FORMAT(v_curdate, '%Y%V') AS YYYYWW,
            WEEK(v_curdate,3) AS WEEK_NO,
            QUARTER(v_curdate) AS QTR,
            WEEKDAY(v_curdate) + 1 AS WEEK_DAY,
            MONTHNAME(v_curdate) AS MM_NAME,
            DAYNAME(v_curdate) AS WD_NAME;
            set v_curdate := DATE_ADD(v_curdate, INTERVAL 1 DAY) ;
        END WHILE;    
    END;
第三步:执行存储过程:

CALL SP_TIME_DIM('19010101','20991231');


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.5.2 Zero

粤ICP备18035038号