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の間に登録されたすべてのレコードを選択したいということです。これをどのように達成できますか?

「HOURS(date)between 9 to 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 

これはあまり最適ではありません。理想的には、タイムスタンプの日付部分を含む個別の[インデックス付き]列を追加します。

または、時間の下限と上限を連結した現在の日付を使用して、コードにクエリを組み込みます。

于 2012-09-06T12:04:52.757 に答える
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 に答える
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 に答える