18

Active Record のドキュメントを見ると、より大きい / より小さい比較を使用して日付を照会できます。ただし、where date = Date.today を選択したい場合、または日付が昨日より大きく明日より小さい場所をクエリする必要がある場合はどうすればよいでしょうか?

ご覧のとおり、次のクエリでまさにそれを行っており、Date = today が空のセットを返す場所をクエリしています。

1.9.3p286 :096 > Subscription.where("created_at = ?", Date.today).count
   (0.5ms)  SELECT COUNT(*) FROM `subscriptions` WHERE (created_at = '2013-01-18')
 => 0 

対。

1.9.3p286 :098 > Subscription.where("expiration_date < ? AND expiration_date > ?", Date.today + 1, Date.today - 1).count
   (0.4ms)  SELECT COUNT(*) FROM `subscriptions` WHERE (expiration_date < '2013-01-19' AND expiration_date > '2013-01-17')
 => 1 

これは今日の日付を照会する適切な方法ですか、それとも何か不足していますか?

4

3 に答える 3

42

これはこの質問のDUPだと思います:

日時列から日付を選択するには?

Subscription.where("DATE(created_at) = ?", Date.today).count

これが MySQL と PostgreSQL で機能すると確信していますが、それが SQL 標準であるかどうかはわかりません。

ウィキペディアはTO_DATE、標準になると考えているようです: http://en.wikipedia.org/wiki/SQL#Date_and_time

ただし、PostgreSQLではうまくいきませんでした。

于 2013-01-18T17:57:52.007 に答える