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

Mysql 查找一天中两小时之间的所有行,mysql,sql,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 问题是,我想选择今天在9和12之间注册的所有记录。我怎样才能做到这一点 我知道如何像“9点到12点之间的小时数(日期)”,但我想让MySQL考虑当天的日期 谢谢 更新-如果您将日期列编入索引,则这应该更好: SELECT *

我的问题是:

我有一张这样的桌子:

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
问题是,我想选择今天在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") 
从表中选择*,其中
日期>=截止日期(concat(“2012-02-03”,“09”),%Y-%m-%d%h)
及

date=9和HOUR(date)更新-如果您将date列编入索引,则这应该更好:

 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") 
从表中选择*,其中
日期>=截止日期(concat(“2012-02-03”,“09”),%Y-%m-%d%h)
及

date=9和HOUR(date)如果您有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'

如果您有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'

如果date列是index,这将为您提供更好的性能

where   date_col>=date_add(current_date,interval 9 hour)
    date_col<=date_add(current_date,interval 12 hour)
其中date\u col>=date\u add(当前日期,间隔9小时)

date\u col如果date列是index,这将为您提供更好的性能

where   date_col>=date_add(current_date,interval 9 hour)
    date_col<=date_add(current_date,interval 12 hour)
其中date\u col>=date\u add(当前日期,间隔9小时)

你试过什么?既然你知道今天的日期,你试了什么?假设您知道今天的日期。谢谢,但当我尝试您的请求时,我得到以下错误:
函数prc6.HOURS不存在
(prc6是我的数据库)我想他是说
HOUR()
-工作得很好!我会考虑你的暗示!谢谢。:)@bendataclear-你说得对。它是固定的;感谢您的注意。我必须指出,由于性能问题,不建议在选定列周围使用函数
WHERE DATE(DATE).
。谢谢,但当我尝试您的请求时,我得到以下错误:
函数prc6.HOURS不存在
(prc6是我的数据库)我想他是指
HOUR()
-工作得很好!我会考虑你的暗示!谢谢。:)@bendataclear-你说得对。它是固定的;感谢您的注意。我必须指出,由于性能问题,不建议在选定列周围使用函数
WHERE DATE(DATE).
。谢谢您的回答,但我没有SQL 2008:)谢谢您的回答,但我没有SQL 2008:)