4

/テーブルに2つのdatetime列があります:と。生年月日が作成日の13年以内のユーザーを探したいのですが。Useruserscreated_atbirthdate

同等のRailsifステートメントは次のようになります((created_at - birthdate) < 13.years)

これをActiveRecordクエリ(PostgreSQLで機能するクエリ)に変換するにはどうすればよいですか?これも可能ですか、それともすべてのレコードを手動で繰り返す必要がありますか?

4

2 に答える 2

12

これを行う最も簡単な方法は、間隔を使用することです。これは、Railsバージョンのほぼ単純な音訳です。

User.where(%q{created_at - birthdate < interval '13 years'})

2つのタイムスタンプ(またはタイムスタンプと日付)の違いは間隔であるため、比較の右側に適切な値が必要です。

于 2012-04-24T18:04:10.727 に答える
0

where句内のPostgreSQL構文でそれを定式化する必要があります。

MySQLの場合、これはdatediff関数を使用すると次のようになります。

User.where("DATEDIFF(created_at, birthdate) > (13 * 365)")

13 * 356は、datediffが日数の差を返すため、3年を日数で表すためにあります。

次に、それを次のようなスコープのような関数にカプセル化します。

class User < ActiveRecord::Model
  def self.age_difference(years)
    where("DATEDIFF(created_at, birthdate) > (? * 365)", years)
  end
end

だからあなたはそれを呼ぶことができます:

User.age_difference(13).each do |user|
  puts user.inspect
end

Postgresでも似ていると思います。

于 2012-04-24T16:00:30.707 に答える