存储过程 生成一张日历表

目录

1、创建表结构:

 2、创建存储过程

 3、调用函数


描述:输入想要生成的年份,调用存储过程,即可生成该年的全部日历。

存储过程执行后效果图

操作步骤:

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年日历

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值