目录
描述:输入想要生成的年份,调用存储过程,即可生成该年的全部日历。
存储过程执行后效果图
操作步骤:
1、创建表结构:
CREATE TABLE
calendar_info
(
cty VARCHAR(5) COMMENT '国家',
cdr_Code VARCHAR(5) COMMENT '日历代码',
date_string VARCHAR(20) COMMENT '日期String类型',
YEAR CHAR(4) COMMENT '年',
MONTH CHAR(2) COMMENT '月',
week CHAR(1),
DAY CHAR(2) COMMENT '日',
hour CHAR(2) COMMENT '时',
cdr_date DATETIME COMMENT '日历日期',
creator VARCHAR(32) COMMENT '创建人',
create_date DATETIME COMMENT '创建日期',
create_inst VARCHAR(20) COMMENT '创建机构',
del_flag CHAR(1) COMMENT '删除标志',
tms TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP COMMENT '时间戳',
INDEX index_calendar_info_hour (hour),
INDEX index_calendar_info_hour_month (MONTH)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='日历表';
2、创建存储过程
我是在 Navicat 工具中新建的,函数如下:
BEGIN
declare i int;
declare start_date varchar(20);
declare end_date varchar(20);
declare date_count int;
set i=0;
set start_date= concat(yr, '-01-01');
set end_date = concat(yr+1,'-01-01');
DELETE from calendar_info where year = yr;
set date_count = datediff(end_date, start_date);
while i < date_count DO
INSERT into calendar_info (CTY,CDR_CODE,date_String,YEAR,MONTH,WEEK,DAY,HOUR,CDR_DATE,CREATOR,CREATE_DATE,CREATE_INST)
SELECT
'CN',
'CN01',
DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y/%m/%d') date_String,
DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y') YEAR,
DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%m') MONTH,
case DAYOFWEEK(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s')) when 1 then '7' when 2 then '1' when 3 then '2' when 4 then '3' when 5 then '4' when 6 then '5' when 7 then '6' end WEEK,
DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%d') DAY,
DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%H') HOUR,
DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y-%m-%d') CDR_DATE,
'baicun',
DATE_FORMAT(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),'%Y-%m-%d %H:%i:%s') CDR_DATE,
'ccx'
from dual;
set i=i+1;
set start_date = DATE_FORMAT(date_add(STR_TO_DATE(start_date,'%Y-%m-%d %H:%i:%s'),interval 1 day),'%Y-%m-%d');
end while;
END
3、调用函数
CALL function_calendar_procedures(2018);--生成2018年日历