我有一个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;给了我一些问题。
如何在这里获得平等?
答案 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'