2016-09-06 66 views
0

我要检查当前时间给予两次与否之间,使用MySQL查询像下面,如何检查时间comparsion在MySQL

id start_time end_time 
1 08:00 PM 08:00 AM 

select *,if((serverTime >= startTime and serverTime <= endTime),'MetTheTime','DintMetTheTime') as Status from(select STR_TO_DATE(concat(SUBSTRING_INDEX(start_time, ' ', 1),':00 ',SUBSTRING_INDEX(start_time, ' ', -1)),'%l:%i:%S %p') as startTime,STR_TO_DATE(concat(SUBSTRING_INDEX(end_time, ' ', 1),':00 ',SUBSTRING_INDEX(end_time, ' ', -1)),'%l:%i:%S %p') as endTime,time(now()) as serverTime from(select start_time,end_time from table where id=1) a) b; 

当我执行查询的输出是:

startTime endTime serverTime Status 
20:00:00 08:00:00 03:47:57 DintMetTheTime 

但预期输出是:

startTime endTime serverTime Status 
20:00:00 08:00:00 03:47:57 MetTheTime 

我在哪里做错了吗?

根据回复帖子。我打入Time

select *,if((serverTime >= startTime and serverTime <= endTime),'MetTheTime','DintMetTheTime') as Status from(select start_time as startTime, end_time as endTime,time(now()) as serverTime from(select start_time,end_time from table where id=1) a) b; 

但仍然这种情况不起作用?

+0

确保你的字段类型是'表中的 –

+0

time'但我不应该保持字段类型是时间。它必须是String。 – MMMMS

+0

尝试在查询中使用'STR_TO_DATE(startTime,“%h:%i:%s”)'而不是'startTime',然后与其他人进行比较,然后比较时间 –

回答

1

看起来你没有足够的逻辑来解释超时。在你的例子serverTime >= startTime,你可以看到'03:47:57' >= '20:00:00'是错误的,不正确。

当您的结束时间值小于您的开始时间值时,您需要制定一些特殊用途逻辑以供使用;表示隔夜时间间隔。

-1

非常简单的解决办法只是改变你的表的列数据类型为datetime代替time和存储日期和时间,现在应该算正常

+0

我应该存储时间为08:00 PM而不是08:00:00。 – MMMMS

+0

不是强制性的,因为您可以将字符串转换为时间戳。 –