通过mysql从时间间隔获取数据

时间:2015-10-17 07:40:03

标签: php mysql sql database

我需要从当前时间不到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无效。

2 个答案:

答案 0 :(得分:1)

如果字段为datetimetime,那肯定会更有意义吗?但是,以下可能会做你想要的......

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)