1

这是我的问题:

我有一张这样的桌子:

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 考虑当天的日期。

谢谢 !

4

3 回答 3

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 

这不是很理想。理想情况下,添加单独的 [indexed] 列,该列将包含时间戳的日期部分。

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

于 2012-09-06T12:04:52.757 回答
0

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

where   date_col>=date_add(current_date,interval 9 hour)
    date_col<=date_add(current_date,interval 12 hour)
于 2012-09-06T12:43:59.100 回答
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'
于 2012-09-06T12:12:15.957 回答