查找一天中两小时之间的所有行

时间:2012-09-06 12:02:50

标签: mysql sql

这是我的问题:

我有一张这样的表:

id  date                name
543 2012-07-30 09:49:08 test
544 2012-07-30 10:54:12 test2
545 2012-08-01 10:54:12 test3

问题是,我想选择注册today之间的所有记录(例如)9和12.我怎样才能实现这一目标?

我知道怎么做“HOURS(日期)在9到12之间”,但我希望MySQL考虑当天的日期。

谢谢!

3 个答案:

答案 0 :(得分:1)

更新 - 如果您将日期列编入索引,这应该更好:

 SELECT * FROM table WHERE 
  date>=str_to_date(concat("2012-02-03"," 09"),"%Y-%m-%d %h") 
 AND 
  date<=str_to_date(concat("2012-02-03"," 12"),"%Y-%m-%d %h") 

旧版本:

SELECT * FROM table WHERE DATE(date)=DATE(NOW()) AND HOUR(date)>=9 AND HOUR(date)<=12 

这不是最优的。理想情况下,添加单独的[索引]列,其中包含时间戳的日期部分。

或者使用与较低/较高小时边界连接的当前日期在代码中构建查询。

答案 1 :(得分:0)

如果你有sql 2008,你可以执行以下操作:

select 
ID
,cast([Date] as Date) as dt
,cast([Date] as Time) as tm
,name
from table
where cast([Date] as Time) BETWEEN '09:00:00' AND '12:00:00'

答案 2 :(得分:0)

如果日期列是索引,这将为您提供更好的性能

where   date_col>=date_add(current_date,interval 9 hour)
    date_col<=date_add(current_date,interval 12 hour)