indilog

Ruby/Rails/React/Goなどに関して自分が勉強したことなどを投稿しています

【Rails】Time型で時間の条件だけを指定して取得

DBはSQLite3を使用

問題

id: 1, starttime: 2000-01-01 10:00:00 +0900
id: 2, starttime: 2000-01-01 10:00:00 +0900 

このようなレコードがあった時に

Model.where(starttime: Time.parse("2000-01-01 10:00:00 +0900"))

ではid: 1のみの取得となってしまった時があった。

調査

Model.find(1).starttime.to_i
=> 946688400

Model.find(2).starttime.to_i
=> 946688400

は両方同じものが返ってくる。 ということはDB側で値を比較する際に何かが起きている?

解決

とりあえずこれを

Model.where("time(starttime) == ?", Time.parse("2000-01-01 10:00:00").strftime('%H:%M:%S')) 

と記述して、DB側で文字列化し、比較することによって両方とも取得ができた。 でもこれってDBの種類によって挙動が変わる可能性ないのかな?まだまだ調査が必要が感じがする。