调用一个存储过程或函数:
DROP PROCEDURE IF EXISTS pro_dim_date; CREATE PROCEDURE pro_dim_date (IN bdate DATE, IN edate DATE) BEGIN DECLARE var DATE DEFAULT bdate; DECLARE evar DATE DEFAULT DATE_ADD(edate, INTERVAL 1 DAY); DECLARE bweek DATE; DECLARE eweek DATE; WHILE var < evar DO SET bweek = DATE_ADD(DATE_SUB(var, INTERVAL 1 WEEK),INTERVAL 1 DAY); SET eweek = DATE_SUB(DATE_ADD(var, INTERVAL 1 WEEK),INTERVAL 1 DAY); INSERT INTO dim_date ( `date_id`, `date_name`, `date_of_month`, `year_id`, `year_name`, `quarter_id`, `quarter_name`, `month_id`, `month_name`, `month_of_year_name`, `month_of_year_id`, `week_id`, `week_name`, `week_of_year_id`, `week_of_year_name`, `is_weekend` ) VALUES ( DATE_FORMAT(var, '%Y%m%d'), DATE_FORMAT(var, '%Y-%m-%d'), DAYOFMONTH(var), YEAR (var), CONCAT(YEAR(var), '年'), QUARTER (var), CONCAT(QUARTER(var), '季度'), DATE_FORMAT(var, '%Y%m'), CONCAT(YEAR (var), '年', MONTH (var), '月'), CONCAT(MONTH(var), '月'), MONTH (var), WEEKDAY(var), CASE WEEKDAY(var) WHEN 0 THEN '星期一' WHEN 1 THEN '星期二' WHEN 2 THEN '星期三' WHEN 3 THEN '星期四' WHEN 4 THEN '星期五' WHEN 5 THEN '星期六' WHEN 6 THEN '星期日' END, WEEKOFYEAR(var), CONCAT('第', WEEKOFYEAR(var), '周(', MONTH (bweek), '月', DAY (bweek), '日~', MONTH (eweek), '月', DAY (eweek), '日'), CASE WHEN WEEKDAY(var) > 4 THEN '是' ELSE '否' END ); SET var = DATE_ADD(var, INTERVAL 1 DAY); END WHILE; END
调用:
CALL pro_dim_date('2005-01-01','2013-12-31')
结果
20131217 2013-12-17 17 2013 2013年 4 4季度 201312 2013年12月 12月 12 1 星期二 51 第51周(12月11日~12月23日 否 20131218 2013-12-18 18 2013 2013年 4 4季度 201312 2013年12月 12月 12 2 星期三 51 第51周(12月12日~12月24日 否 20131219 2013-12-19 19 2013 2013年 4 4季度 201312 2013年12月 12月 12 3 星期四 51 第51周(12月13日~12月25日 否 20131220 2013-12-20 20 2013 2013年 4 4季度 201312 2013年12月 12月 12 4 星期五 51 第51周(12月14日~12月26日 否 20131221 2013-12-21 21 2013 2013年 4 4季度 201312 2013年12月 12月 12 5 星期六 51 第51周(12月15日~12月27日 是 20131222 2013-12-22 22 2013 2013年 4 4季度 201312 2013年12月 12月 12 6 星期日 51 第51周(12月16日~12月28日 是 20131223 2013-12-23 23 2013 2013年 4 4季度 201312 2013年12月 12月 12 0 星期一 52 第52周(12月17日~12月29日 否 20131224 2013-12-24 24 2013 2013年 4 4季度 201312 2013年12月 12月 12 1 星期二 52 第52周(12月18日~12月30日 否 20131225 2013-12-25 25 2013 2013年 4 4季度 201312 2013年12月 12月 12 2 星期三 52 第52周(12月19日~12月31日 否 20131226 2013-12-26 26 2013 2013年 4 4季度 201312 2013年12月 12月 12 3 星期四 52 第52周(12月20日~1月1日 否 20131227 2013-12-27 27 2013 2013年 4 4季度 201312 2013年12月 12月 12 4 星期五 52 第52周(12月21日~1月2日 否 20131228 2013-12-28 28 2013 2013年 4 4季度 201312 2013年12月 12月 12 5 星期六 52 第52周(12月22日~1月3日 是 20131229 2013-12-29 29 2013 2013年 4 4季度 201312 2013年12月 12月 12 6 星期日 52 第52周(12月23日~1月4日 是
表结构
CREATE TABLE `dim_date` ( `date_id` INT (11) NOT NULL COMMENT '20110512', `date_name` VARCHAR (16) DEFAULT NULL COMMENT '2011-05-12', `date_of_month` INT (11) DEFAULT NULL COMMENT '12', `year_id` INT (11) DEFAULT NULL COMMENT '2011', `year_name` VARCHAR (16) DEFAULT NULL COMMENT '2011年', `quarter_id` INT (11) DEFAULT NULL COMMENT '2', `quarter_name` VARCHAR (16) DEFAULT NULL COMMENT '2季度', `month_id` INT (11) DEFAULT NULL COMMENT '5', `month_name` VARCHAR (16) DEFAULT NULL COMMENT '5月', `month_of_year_name` VARCHAR (16) DEFAULT NULL COMMENT '2011年5月', `month_of_year_id` INT (11) DEFAULT NULL COMMENT '201105', `week_id` INT (11) DEFAULT NULL, `week_name` VARCHAR (16) DEFAULT NULL, `week_of_year_id` INT (11) DEFAULT NULL, `week_of_year_name` VARCHAR (32) DEFAULT NULL, `is_weekend` enum ('否', '是') DEFAULT NULL COMMENT '是否周末', PRIMARY KEY (`date_id`), KEY `ix_dim_date_date_name` (`date_name`), KEY `ix_dim_date_month_id` (`month_id`), KEY `ix_dim_date_year_id` (`year_id`), KEY `ix_dim_date_quanter_id` (`quarter_id`), KEY `ix_dim_date_week_of_year_id` (`week_of_year_id`, `week_of_year_name`) ) ENGINE = MyISAM DEFAULT CHARSET = utf8