拆解跨天时间(mysql游标循环)-在转来的基础上增加一些更改

尊重作者,原文链接:https://blog.csdn.net/liminghui4321/article/details/102763052

原始数据表:

需要将上面的时间段转成每一天的记录:

 在原文的基础上作了一些更改:

1、在表sales上增加一个字段bj:alter table sales add column bj int DEFAULT 0 null;
2、存储过程基础上增加了一些更改:

drop PROCEDURE if EXISTS p4;
create procedure p4()
begin
declare id1,gt,it,bjj int;
declare brand varchar(15);
declare sdate,edate,mdate date;
declare flag int default 0;
-- 声明游标
declare cur cursor for select *,datediff(enddate,startdate) from sales where bj =0;
declare continue handler for not found set flag = 1;
-- select *,datediff(enddate,startdate) from sales where bj=0;

-- 打开游标
open cur;
-- 获取结果
l2:loop

  fetch cur into id1,brand,sdate,edate,bjj,gt;
  if flag=1 then -- 当无法fetch会触发handler continue
     select 'flag=1 not found';
     leave l2;
  end if;
  -- 逻辑处理,拆解跨天
  IF(gt>=0) THEN
    set it=0;
    select id1,brand,sdate,edate,bjj,gt;
    while it<=gt DO
        insert into sales2(id,brand,tdate) values(id1, brand,date_add(sdate,interval it day));
        set it=it+1;
    end while;
    update sales set bj=1 where id = id1;
  end if;
  -- 关闭游标
end loop;
close cur;
end;

call p4();

----

 

posted @ 2024-03-12 15:19  祺祺怪怪的  阅读(16)  评论(0编辑  收藏  举报