Rails activerecord:按日期时间字段查询记录?

时间:2010-08-24 22:20:57

标签: ruby-on-rails activerecord ruby-on-rails-3

我正在尝试通过类型为TimeSlot的字段start_date查询datetime表中的记录。这是我到目前为止尝试失败的原因:

TimeSlot.where(:start_date => DateTime.new(2010, 9, 1))

TimeSlot.where(:start_date => DateTime.new(2010, 9, 1).to_s)

TimeSlot.where(:start_date => "2010-09-08")

TimeSlot.where(:start_date => "2010-09-08 00:00:00")

我很感激任何帮助。

3 个答案:

答案 0 :(得分:1)

您的查询对我来说很好。

您确定数据库中有匹配的行吗?

要进行调试,请查看logs / development.log文件。

添加了:

问题可能是时区。您的查询正在使用服务器的时区。您的数据可以存储在不同的时区。

答案 1 :(得分:0)

我认为这也是一个时区的事情。数据库中的所有内容都由rails自动转换为UTC。如果没有偏移,查询1和4应该有效。

答案 2 :(得分:0)

来自rubyonrails.org的回答

  

Client.where(" created_at> =:start_date AND created_at< =:end_date",     {:start_date => params [:start_date],:end_date => PARAMS [:END_DATE]})

  

Client.where(" created_at IN(?)",     (PARAMS [:起始日期] .to_date)..(PARAMS [:END_DATE] .to_date))

如果你的start_date是一个日期字段,以下是我查询所有TimeSlot的所有内容#34; 2010-09-08&#34 ;.

TimeSlot.where("start_date >= ? AND start_date <= ?", "2010-09-08", "2010-09-08")

如果start_date是日期时间字段。

TimeSlot.where("start_date >= ? AND start_date <= ?", "2010-09-08", "2010-09-09")

因为日期时间从00:00:00开始