我需要从当前时间不到2小时和当前时间超过2小时获取数据。在数据库表中,我创建了2个字段,一个是开始时间,另一个是关闭时间。两个字段都是VARCHAR格式。在我的数据库表下面。
http://i.imgur.com/JJK5c21.png
我创建了mysql查询,但这不起作用。
select *
from table_name
where TIME_FORMAT('states','h:i %A') > '$curr-2 '
and TIME_FORMAT('close_time','h:i %A') < '$curr+2'
$curr-2 = Current time - 2 Hours (minus)
$curr+2 = Current time + 2 Hours (Plus)
这个sql无效。
答案 0 :(得分:1)
如果字段为datetime
或time
,那肯定会更有意义吗?但是,以下可能会做你想要的......
select * from `table_name`
where
time_format( time( now() ),'%h:%i')
between
time( concat( time_format( `states`,'%h')+2,':',time_format( `states`,'%i') ) )
and
time( concat( time_format( `close_time`,'%h')+2,':',time_format( `close_time`,'%i') ) )
答案 1 :(得分:1)
你真的应该将这些字段更改为DATETIME以使其更容易,但是下面的查询将起作用并且我提供了一个SQL小提琴。
请注意我在小提琴上将小时数设置为12而不是2,以确保它显示有效的查询
http://www.sqlfiddle.com/#!9/579db/37/0
SELECT * FROM `table_name`
WHERE
STR_TO_DATE(CONCAT('1971-01-01 ', `states`), '%Y-%m-%d %h:%i %p') > DATE_SUB(CONCAT('1971-01-01 ', CURRENT_TIME()), INTERVAL 2 HOUR)
AND
STR_TO_DATE(CONCAT('1971-01-01 ', `close_time`), '%Y-%m-%d %h:%i %p') < DATE_ADD(CONCAT('1971-01-01 ', CURRENT_TIME()), INTERVAL 2 HOUR)