finishTime时间大于当前时间。比较小时和分钟。
SELECT * FROM example WHERE DATE_FORMAT( finishTime,'%H:%i')>DATE_FORMAT( beginTime,'%H:%i')
惯例,在等号左边尽量不要有对字段的运算,所以一般用法有:1、判断其是否在某个日期区间:
Where CheckDate Between '2013-01-01' And '2013-01-31'
这个方法也可用于加几天是多少,或减几天是多少:
把起迄日期参数化,原CheckDate要加的,那就变成@BeginDate加,减也同理~
2、判断其是否大于某天:
Where CheckDate >'2013-01-01' 或大于等于:Where CheckDate >='2013-01-01'
小于某天
Where CheckDate <'2013-01-01' 或小于等于:Where CheckDate <='2013-01-01'
3、判断其是否等于某天:
如果Check字段不带时间,只是年月日,那直接等于就可以了;
Where CheckDate ='2013-01-01'
如果CheckDate字段是携带时间的就会有差别;这一点,在上述所有方法中都需要注意
eg:CheckDate 实际存储值可能是: 20130101 08:50:54:000 或 20130101 22:50:54:000
#创建存储过程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)并不是很好的选择。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)