选择在哪里(Float,.....)

时间:2012-08-28 23:19:51

标签: mysql

我试图用下一句话从mysql中选择一些值:

SELECT 
  id, lead_id, form_id, field_number, value 
FROM 
  wp_rg_lead_detail 
WHERE 
  field_number IN (6.3, 6.6, 11, 12, 17, 14) 
ORDER BY 
  lead_id, field_number

字段field_number是一个浮点数,而select只列出了11,12,17和14个字段,但没有列出6.3和6.6中的值

这句话有什么问题?

感谢。

2 个答案:

答案 0 :(得分:4)

原因是6.3和6.6实际上并未存储在您的表中。计算机无法完美地代表大多数小数值。当存储的值与6.3或6.6进行比较时,它不匹配,即使看起来应该如此。差异可能在小数点后第9位或第10位,您通常不会看到。

http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html

如果需要精确比较值,请将它们设为整数或小数。如果小数点右边没有任何数字超过1,则可以将所有值乘以10,以仅使用整数,例如。

答案 1 :(得分:1)

查询没有任何问题。问题是float不是精确类型。请改为使用decimal(或将查询更改为... WHERE (field_number BETWEEN 6.2999 AND 6.3001) OR (field_number BETWEEN 6.5999 AND 6.6001 OR ()...