mysql 存储过程怎样实现根据判断当前时间是否属于某个时间段修改数据库字段值
比如现在数据库表t中有三个字段,一个开始时间startdate,一个结束时间enddate,一个状态state。我想实现当系统时间处于两个时间段内时,修改state为‘1...
比如现在数据库表t中有三个字段,一个开始时间startdate,一个结束时间enddate,一个状态state。我想实现当系统时间处于两个时间段内时,修改state为‘1’,不在时间段内时修改state为‘2’。存储过程和定时任务应该可以实现,求详细的存储过程。万分感谢!
展开
1个回答
展开全部
#创建存储过程
drop procedure if exists test;
create procedure test()
BEGIN
create table tmp1(startdate datetime,enddate datetime);
insert into tmp1 select startdate,enddate from d where startdate<=curdate() and enddate>=curdate();
update d set state=1 where startdate in(select startdate from tmp1) and enddate in(select enddate from tmp1);
update d set state=2 where startdate not in(select startdate from tmp1) and enddate not in(select enddate from tmp1);
drop table tmp1;
end;
#调用存储过程
call test();
思路:
创建一张表,先将当前时间与表内时间对比,如果当前时间在哪一行数据的开始时间范围和结束时间范围内则将数据插入tmp1表,进行update,将开始时间和结束时间都等于tmp1表内的startdate和enddate时改变该行state=1,不等于则改变该行state=2,删除使用过的tmp1表,结束。
注意:由于没有一个主键值,这里采用where startdate not in(select startdate from tmp1) and enddate not in(select enddate from tmp1)以及 where startdate in(select startdate from tmp1) and enddate in(select enddate from tmp1)并不是很好的选择。
drop procedure if exists test;
create procedure test()
BEGIN
create table tmp1(startdate datetime,enddate datetime);
insert into tmp1 select startdate,enddate from d where startdate<=curdate() and enddate>=curdate();
update d set state=1 where startdate in(select startdate from tmp1) and enddate in(select enddate from tmp1);
update d set state=2 where startdate not in(select startdate from tmp1) and enddate not in(select enddate from tmp1);
drop table tmp1;
end;
#调用存储过程
call test();
思路:
创建一张表,先将当前时间与表内时间对比,如果当前时间在哪一行数据的开始时间范围和结束时间范围内则将数据插入tmp1表,进行update,将开始时间和结束时间都等于tmp1表内的startdate和enddate时改变该行state=1,不等于则改变该行state=2,删除使用过的tmp1表,结束。
注意:由于没有一个主键值,这里采用where startdate not in(select startdate from tmp1) and enddate not in(select enddate from tmp1)以及 where startdate in(select startdate from tmp1) and enddate in(select enddate from tmp1)并不是很好的选择。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询