SQL浮点列:选择“ x = 2.0的地方”有效,但“ x = 2.1的地方”无效

时间:2019-09-24 20:59:31

标签: mysql sql ruby-on-rails floating-point

我有一个模型为Project的Ruby on Rails应用,该模型的属性为wcag_version,类型为float。

Screenshot

我有一个与wcag_version = 2的记录,一个与wcag_version = 2.1的记录:

Screenshot

我注意到,Rails使用wcag_version = 2使用Project.where(wcag_version: 2.0)查找记录:

[4] pry(#<WcagElementsController>)> Project.where(wcag_version: 2.0)
=> [
    [0] #<Project:0x007f9fa900c6e8> { :id => 1 ... }

但是找不到使用wcag_version = 2.1的{​​{1}}的记录:

Project.where(wcag_version: 2.1)

这似乎是一个SQL问题,而不是Rails问题。生成的SQL是:

[5] pry(#<WcagElementsController>)> Project.where(wcag_version: 2.1)
=> []

如果我直接在数据库上手动执行,也不返回任何内容:

Screenshot

这是怎么回事?顺便说一下,我正在使用MySQL。

1 个答案:

答案 0 :(得分:0)

处理Rails,看来我可以解决以下问题:

Project.all.each do |project|
  if project.wcag_version >= reference_criterion.wcag_version
    # Do stuff
  end
end

虽然效果不佳,但为我省去了很多麻烦。

为完整起见,这是原始代码:

Project.where("wcag_version >= #{reference_criterion.wcag_version}").each do |project|
  # Do stuff
end