MySQL 生成 时间轴

调用一个存储过程或函数:

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

酷

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值