RubyonRailsを使ってあれこれ作業中、とあるテーブルのdatetime型のデータから特定の月のみに合致するものを抜き出したくなった。

例としては、ブログアプリを作っていて、ある年とある月のエントリだけを抜き取って表示したい、とかそんな感じだ。
[code]
Entry.find(:all, :conditions=>)
[/code]
で条件を絞ればいいというところまではすぐ分かるが、datetimeの場合どのように絞ればいいのかがわからない。
通常文字列みたいに「xxxx =>”yyy”」という風にも、数値のように「xxx => yyy」とするわけにもいかないので、はまってしまった。

こういう時は困ったときのStackOverflow頼み。さっそく聞いてみた
http://stackoverflow.com/questions/1576027/how-to-use-datetime-in-the-condtions-of-a-find-count-in-ruby-on-rails
なんと投稿して三分で答が返ってきた。

さすが世界中のエンジニアのすくつですね。

で、例えば検索元のデータがdatetimeの場合、
[code]
xxx.find( :all, :conditions => ["month(yyy) = ? AND year(yyy) = ?", zzz.month, zzz.year] )
[/code]
このようにすれば合致する
yyyが検索対象のカラム、zzzが検索する条件となる。

ちなみに検索条件が固定の場合はこんな感じ。
[code]
xxx.find( :all, :conditions => ["month(yyy) = ? AND year(yyy) = ?", "09", "2009"] )
[/code]
当然findじゃなくてcountでも同じことができる。

どーでもいいことだけどやっぱり海外じゃ月、日、年なんだなぁと思った。
たぶん日本人的には
[code]
xxx.find( :all, :conditions => ["year(yyy) = ? AND month(yyy) = ?", "2009", "09"] )
[/code]