检查MySQL Float字段是否相等

时间:2010-02-02 22:15:54

标签: mysql floating-point

我有一个Joomla系统,我正在尝试更改搜索,以便在数据库中正确找到浮点值。

所以,我有一个在运行时构建的查询,如下所示:

select 'column1'
from 'some_table'
where 'some_float_field' <=> '2.18'

这不起作用,它永远不会匹配任何东西,即使我在db中看到带有此值的记录。

所以我试着这样做:

select 'column1'
from 'some_table'
where 'some_float_field' <=> 2.18

没有运气,所以我尝试转换为小数(浮动因某些原因不起作用),所以我尝试了这个:

select 'column1'
from 'some_table'
where 'some_float_field' <=> CAST('2.18' AS DECIMAL(20, 2))

没有骰子......

请注意,&gt; =或&lt; =会返回正确的结果,只需&lt; =&gt;给了我一些问题。

如何在这里获得平等?

5 个答案:

答案 0 :(得分:15)

通常使用这些类型的问题,提供一个复制结果的小例子是很好的。

通常测试精确浮点值是一个坏主意,因为浮点精度不是一个精确的科学。使用一些容忍度要好得多。

create table foo1 (col1 float);

insert into foo1 values (2.18);
select * from foo1 where abs(col1-2.18) <= 1e-6

答案 1 :(得分:4)

我找到了一种检查用户视为平等的方法。

我必须将字段转换为字符串并测试字符集,所以这对他们来说很好:

select 'column1'
from 'some_table'
where CAST('some_float_field' AS CHAR) <=> '2.18'

答案 2 :(得分:2)

考虑一下:

where abs(some_float_field) - 2.18 < 0.001

答案 3 :(得分:2)

这是一种简单的方法

只需写where some_float_field LIKE 2.18

希望它会有所帮助;)

答案 4 :(得分:0)

我知道这些是一个旧帖子,但如果你不想进行精确比较,只需使用LIKE或NOT LIKE:

select 'column1'
from 'some_table'
where 'some_float_field' NOT LIKE '2.18'