SQLで時間帯検索を行う方法

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

すっきり解決できたのでよかった。


タグ Ruby, Ruby on Rails | パーマリンク.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です