我有一个Joomla系统,我试图改变搜索,以便它正确地找到数据库中的浮点值。检查MySQL Float字段上的相等性
所以,我在运行时建立一个查询,看起来像这样:
select 'column1'
from 'some_table'
where 'some_float_field' <=> '2.18'
这是不行的,它永远不会匹配任何东西,即使我看到的记录在数据库中该值那里。
于是,我就只是这样做,而不是:
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))
没有骰子...
请记住,> =或< =返回正确的结果,只是< =>给我的问题。
我该如何在这里工作?
是的,在这种情况下,我实际上是在试图找到用户所投入东西的“重量”,但他们想要匹配确切的数字,所以我必须满足要求。 – Joseph 2010-02-02 22:28:24
用户需要在表中使用浮点数据类型吗?通常,当用户想要精确的分数(例如货币)时,十进制数据类型是更好的选择。未来几年你会遇到四舍五入的问题。想想看。如果它真的是金钱,无论如何,不要浪费时间,重新设计现在的小数点。相信我,我从这里讲述经验。 – 2010-02-03 02:05:59
我同意塞瓦。在开始处理新数据库之前,我要做的第一件事是运行以下查询并查找使用了多少浮点数列。 SELECT DATA_TYPE,COUNT(*)AS mycount FROM information_schema.COLUMNS WHERE TABLE_SCHEMA NOT IN('information_schema','mysql')GROUP BY DATA_TYPE ORDER BY mycount DESC 如果我发现double,float,bigint和blob的数目是太高,我认为会有很多问题。 如果十进制数,日期,日期时间,tinyint太小(或不足),那么再次出现问题:) – shantanuo 2010-02-03 06:42:44