我个人并不推荐在实际开发中使用存储过程,充满了各种的不方便,之所以写这东西,全在于学习,如果有高手看到我的内容有问题,可以随时指出或向我开炮。
创建存储过程:
-- 创建存储过程 getTime
-- param start_time 开始时间(输入参数 时间类型)
-- param end_time 结束时间(输入参数 时间类型)
CREATE PROCEDURE getTime(IN start_time TIMESTAMP, IN end_time TIMESTAMP)
BEGIN
-- 定义变量i 默认值为0
DECLARE i int DEFAULT 0;
-- 定义变量 num 最大值 默认值为天数差(精度是天)
-- 此处也可以用 TIMESTAMPDIFF 根据个人需求而定
-- 比如 精度是分钟 TIMESTAMPDIFF(MINUTE, start_time, end_time)
DECLARE num int DEFAULT (SELECT DATEDIFF(end_time,start_time));
-- 创建一个临时表 用于存放数据
create temporary table time_table(
-- id
id int(64) PRIMARY KEY NOT NULL AUTO_INCREMENT,
-- 时间
time datetime NOT NULL);
-- 循环获取时间
WHILE i <= num DO
-- 向临时表中放入数据
INSERT INTO time_table (`time`)VALUES(DATE_ADD(start_time,INTERVAL i DAY));
-- i 递增
set i=i+1;
-- 结束循环
END WHILE;
-- 返回结果
SELECT time FROM time_table;
-- 删除临时表
DROP TABLE time_table;
END;
调用:
call getTime('2021-08-01', '2021-08-19');
删除存储过程:
drop procedure if exists getTime;