一.创建日期表
我这里统计用到了日统计、月统计,所以表结构设计了日、月两个字段:
建表语句:
CREATE TABLE `obj_date` ( `re_date` varchar(10) NOT NULL COMMENT '日期,如‘2014-05-07’', `re_month` varchar(7) NOT NULL COMMENT '日期,如‘2014-05’' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='日期表,用于统计报表';
二.创建SQL函数
先创建存储过程函数:
CREATE PROCEDURE `getDate`(in startDay date,in endDay date) BEGIN DECLARE count2 INT DEFAULT 0; WHILE DATEDIFF(startDay,endDay)<=0 DO INSERT INTO obj_date(re_date,re_month) VALUES (DATE_FORMAT(startDay,'%Y-%m-%d'),DATE_FORMAT(startDay ,'%Y-%m')); SET count2=count2+1; SET startDay=DATE_ADD(startDay,INTERVAL 1 DAY); END WHILE; END
解释:startDay表示开始时间,格式为 “yyyy-MM-dd ”,endDay 表示截止时间,格式为 “yyyy-MM-dd”,此函数插入日期段内所有天和月,含头含尾
三.调用函数
调用函数示例:
call getDate('2020-01-01', '2023-12-31')
结果:
至此,日期中间表生成完毕,需要不同格式的日期请自行结合函数修改存储过程和表结构即可~