这是我的问题:
我有一张这样的表:
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考虑当天的日期。
谢谢!
答案 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)