postgresqlで時間帯検索を行いたかったのでやり方を調べたので備忘録として残す。
時間帯検索ってのは、例えば9時から18時までの日々のデータを取る、というものだ。
例えば、9時から18時までにユーザー登録されたユーザーを抽出したかったら、こうだ。
SELECT * FROM users WHERE TO_CHAR(users.created_at, 'HH24') BETWEEN '09' AND '17';
そして、これをRails風にしたかったので、以下のようにscopeで定義した。
class User < ActiveRecord::Base scope :only_office_hours, lambda { |from='09', to='17'| where("TO_CHAR(#{self.table_name}.created_at, 'HH24') BETWEEN ? AND ?", from, to) } end
すっきり解決できたのでよかった。