mysql浮点数据没有在where子句中选择

时间:2011-05-26 07:55:39

标签: mysql types

这可能很简单,但我无法得到答案。 我需要从表

中选择浮点值

示例表: -

value
10.2
4.5
4.6
4.06

我的查询

SELECT * FROM table where value = '4.6'

返回空结果集

我该怎么解决这个问题!

5 个答案:

答案 0 :(得分:16)

通常,您永远不应该检查与浮点数的相等性(除非您可能具有相同的对象)。在内部,它表现得更精确,即使它在输出到屏幕时没有显示给你。这个基本原则适用于一般的计算。

有很多方案可以做到这一点,但这里有一个简单的方案,这应该是有道理的:

SELECT * FROM table where value BETWEEN 4.599 AND 4.601

答案 1 :(得分:12)

使用decimal代替float

十进制(10,2)将具有2个且仅有2个小数位,并且可以与整数相同的方式进行比较。 特别是对于monetairy值,你应该总是使用小数,但是在不需要舍入错误的地方,十进制是一个不错的选择。

请参阅:http://dev.mysql.com/doc/refman/5.1/en/precision-math-decimal-changes.html

或者 MySQL DECIMAL Data Type Characteristics

答案 2 :(得分:7)

今天,我也遇到了同样的情况,只是通过使用MySQL的FORMAT函数得到解决,它将返回与WHERE子句完全匹配的结果。

SELECT * FROM yourtable WHERE FORMAT(`col`,2) = FORMAT(value,2)

说明:

FORMAT('col name',precision of floating point number)

希望它有所帮助。

答案 3 :(得分:0)

您也可以尝试查询

SELECT * FROM table WHERE value LIKE 4.6;

答案 4 :(得分:-3)

你写道:

 SELECT * FROM table where round(value, 1) = 4.6