mysql - Rails 5在sql表中找不到日期字段

标签 mysql ruby-on-rails ruby

这个rails sql查询:

Flight.where(arrival_date_time: "2017-04-02 23:29:43".to_datetime)

即使我的数据库中有这个也不起作用:

#<Flight id: 1, departed_from_id: 1, arriving_to_id: 3, departure_date_time: "2017-04-02 16:29:43", arrival_date_time: "2017-04-02 23:29:43", created_at: "2017-04-02 13:29:43", updated_at: "2017-04-02 13:29:43">

返回结果如下:

Flight Load (0.2ms)  SELECT "flights".* FROM "flights" WHERE "flights"."arrival_date_time" = ?  [["arrival_date_time", 2017-04-02 23:29:43 UTC]]
 => #<ActiveRecord::Relation []>

我也尝试过

Flight.find_by(arrival_date_time: "2017-04-02 23:29:43".to_datetime)

Flight.where("arrival_date_time = ?  ", "2017-04-02 23:29:43".to_datetime)

所有 3 个查询都返回 nil。

PS:arrival_date_time属于ActiveSupport::TimeWithZone

最佳答案

我认为您遇到的问题是由于缺乏精确性。尝试以下搜索:

search_time = "2017-04-02 23:29:43".to_datetime
result_1 = Flight.where("arrival_date_time between ? and ?", search_time - 1.second, search_time + 1.second)
result_2 = Flight.where("arrival_date_time between ? and ?", search_time - 1.second, search_time)
result_3 = Flight.where("arrival_date_time between ? and ?", search_time, search_time + 1.second)

对我来说,我得到了 result_1result_3 的预期结果,但没有得到 result_2。这意味着某个地方存在舍入误差,但只要您的搜索可以容忍正负一秒的精度,您就可以按照我的 result_1 行重写您的查询 - 或者更好的是,转换它到一个范围。

关于mysql - Rails 5在sql表中找不到日期字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43212640/

相关文章:

java - 如何创建自动发票,无需生成 jtextfield

mysql - 如何连接依赖于外部组的计数

ruby-on-rails - 如何使用 Capybara 结合查找和内部?

ruby-on-rails - Rails after_create proc 没有给出接收者

mysql - MYSQL中LIKE和=的区别?

php - jQueryUI 自动完成 : Returning data from multiple columns in a MySQL database and joining them

ruby-on-rails - 理想的 Rails 服务器

ruby-on-rails - 如何找出 rails 指向的 ruby​​ 版本存在于何处

ruby-on-rails - Gemfile 的未定义局部变量或方法 `git_source'

ruby-on-rails - 如何在 Github 中托管 gem 并使用它?