0

次の postgreSQL クエリを activerecord ruby​​ クエリに変換する必要があります。

select * 
from my_table 
where (my_time between '2010-12-27 00:00:00' and '2011-01-28 00:00:00') 
  and (my_time::TIME)::VARCHAR like '12:00:00.%';

これにより、各日の 12:00:00.% のデータが抽出されます。時間範囲の部分はできますが、クエリの後半を翻訳する方法がわかりません。

ありがとう

4

1 に答える 1

1

to_charタイムスタンプを適切な文字列形式に変換し、同時に小数秒を削除するために使用できます。

where to_char(my_time, 'HH24:MM:SS') = '12:00:00'
...

その ActiveRecord バージョンは非常に単純です。

MyTable.where("to_char(my_time, 'HH24:MM:SS') = '12:00:00'")

次に、既存の BETWEEN チェックをチェーンします。

extract各時間コンポーネントを個別にチェックするために使用することもできます。

where extract(hour   from my_time) = 12
  and extract(minute from my_time) =  0
  and extract(second from my_time) =  0
  ...

その ActiveRecord バージョンは次のようになります。

MyTable.where('extract(hour   from my_time) = ?', 12)
       .where('extract(minute from my_time) = ?',  0)
       .where('extract(second from my_time) = ?',  0)

どのバージョンが最適かを確認するには、EXPLAIN に問い合わせる必要があります。

于 2012-07-03T18:32:02.573 に答える