4

日付形式のbirth_date変数があります。以下に示すように、Date.todayと比較したいと思います。問題は、年も比較したいので、falseに戻っていることです。誕生日なので、birth_date(月と日)がDate.today.day.monthと等しいかどうかを確認しようとするだけで年は気になりません。

何か案は?

bdays = Soldier.find(:all, :conditions => ["birth_date LIKE ?", Date.today] )
4

2 に答える 2

11

年を無視したいので、日付を分割する必要があります。SQLプロバイダーによって提供される関数のいくつかを使用する必要があります(以下の例ではMySQLを使用しています)。

bdays = Soldier.find(:all, :conditions => ["DAY(birth_date) = ? AND MONTH(birth_date) = ?", Date.today.day, Date.today.month])

SQLite(railsのデフォルトデータベース)を使用している場合、実際の日付型がないため、少し複雑になります。

bdays = Soldier.find(:all, :conditions => ["STRFTIME('%d', birth_date) = ? AND STRFTIME('%m', birth_date) = ?", Date.today.day, Date.today.month])
于 2010-01-12T22:43:30.650 に答える
4

postgresを追加すると考えました:

Soldier.where("EXTRACT(DAY FROM birth_date) = ? AND EXTRACT(MONTH FROM birth_date) = ?", Date.today.day, Date.today.month)

于 2012-08-16T19:17:17.710 に答える