0

どちらもdatetime型の属性start_atとend_atを持つモデル「Competition」があります。与えられた量よりも短い期間、たとえば3日間の競技のみを取得したいと思います。私はこれを簡単に行うことを期待します:

Competition.where('end_at - start_at < ?', X)

問題:Xには何を使用しますか?

私のデータベースには、期間が1日よりわずかに短い1つの競合オブジェクト(start_at = 2011-04-27 00:00:00、end_at = 2011-04-27 23:59:59)と3よりわずかに短いオブジェクトがあります。日(start_at = 2013-02-05 00:00:00、end_at 2013-02-07 23:59:59)、他のすべてははるかに長くなります。

2つのうち短い方を取得するには、X = 60 * 60 * 24(24時間の秒数)を使用することを想定しました。動作しません。だから私は増加係数を掛けようとしましたが、Xに2.7を掛けてもそれは得られませんが、2.8では得られることがわかりました!さて、この奇妙な係数2.8を使用する必要があります...しかし、これは3日より短いオブジェクトを取得する場合には機能しません。ここで8.7を掛ける必要があります。ここで何が起こっているのか誰か知っていますか?

4

2 に答える 2

0

使用可能な機能は、使用しているデータベースによって異なります。たとえば、SQLiteでは、次を使用できます。

Competition.where('julianday(end_at) - julianday(start_at) < ?', 3)
于 2013-01-31T19:16:20.973 に答える
0

これを試して:

Competition.where('DATEDIFF(end_at, start_at) < ?', x)

より正確に

Competition.where('TIMESTAMPDIFF(SECOND, start_at, end_at) < ?', x*86400)  #where 86400 is the seconds in a day and x is no. of days
于 2013-01-31T19:39:16.230 に答える