2012-05-28 7 views
7

Checkinモデルのレールアプリがあります。私は今日の特定の時間範囲内にあるすべてのレコードを探したい。午後12時から午後4時30分までに作成されたすべてのレコードを取得するには、どのようにしてwhereを書きますか?それがうまくいくように2回のRailsクエリ

+0

どのデータベースを使用していますか?時間帯を取得する機能は異なります。時間に加えて時間/分を保存するのが最も簡単です。 –

+0

私はpostgresqlを使用しています。 Railsが提供する標準の 'created_at'タイムスタンプカラムを使用しています –

答えて

36

@ x1a4の回答はあなたには良いはずですが、範囲を使ってよりわかりやすい方法で行うことができます。あなたが時間を作成するための他の方法でTime.parse("12pm")を変更することができます

SELECT "checkins".* 
FROM "checkins" 
WHERE ("checkins"."created_at" BETWEEN '2012-05-28 12:00:00.000000' AND '2012-05-28 16:30:00.000000') 

Chekin.where(created_at: Time.parse("12pm")..Time.parse("4:30pm")) 

それはのようなものを生成する必要があります。あなたは日付の間のレコードを見つけるために宝石の下に使用することができ

8

これは、UTCタイムゾーンを仮定して、見える:

Record.where('created_at > ? AND created_at < ?', Date.today + 12.hours, Date.today + 16.5.hours) 

又はBETWEEN有する:

Record.where('created_at BETWEEN ? AND ?', Date.today + 12.hours, Date.today + 16.5.hours) 

BETWEEN範囲内の第2の値を含んでもよいですか。 Postgres includes it

0

非常に使いやすいし、[スターによって]より明確にこのgem [1]。私はこの宝石を使用しており、APIはより明確であり、ドキュメントもよく説明されています。ここで

Post.between_times(
Time.zone.now - 3.hours, # all posts in last 3 hours 
Time.zone.now 
) 

あなたもPost.by_month("January", field: :updated_at)

は、マニュアルを参照してください、それを試してみてください私たちのフィールドを渡すことができます。

関連する問題