这是我的问题:
我有一张这样的桌子:
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 之间注册的所有记录。我怎样才能做到这一点?
我知道如何做到这一点,例如“9 到 12 之间的小时(日期)”,但我希望 MySQL 考虑当天的日期。
谢谢 !
更新 - 如果您已索引日期列,这应该会更好:
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
这不是很理想。理想情况下,添加单独的 [indexed] 列,该列将包含时间戳的日期部分。
或者在您的代码中构建使用当前日期与下/上小时边界连接的查询。
如果日期列是索引,这将为您提供更好的性能
where date_col>=date_add(current_date,interval 9 hour)
date_col<=date_add(current_date,interval 12 hour)
如果您有 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'