2011-07-06 19 views
0

这个科学价值的问题我已经存储了该数值到mysql中“1E-06”(保存在浮点型)列MySQL中,发现在数据库

当我做了以“0.000001”这个值的搜索,我没有得到任何比赛。有任何想法吗?

SELECT * 
FROM `MATCH__DESTINATION` 
WHERE `W_m` = 0.000001 

回答

0

从这mailing list thread

如果不在[T]的MySQL埃格尔没有检测到等于浮点数,左

浮子ALWA [Y] S更大然后右键点击。 1.1> 1.1 = true。

mysql> SELECT * FROM float_bug WHERE f=1.1; Empty set (0.00 sec)

它的浮点运算的不精确性。改为使用DECIMAL类型 。

0

尝试将匹配列和值限制为等于小数精度,然后进行比较。

SELECT * 
FROM `MATCH__DESTINATION` 
WHERE Cast(`W_m` as Decimal(6,6)) = Cast(0.000001 as Decimal(6,6)) 
0

你在做什么没有问题。 SELECT不返回任何结果的唯一原因是因为没有匹配。几件事情:

  1. W_m是否允许浮点值高达6位小数?

  2. 你确定这个值实际存在于你的表中吗?您是否可以尝试使用任何其他WHERE谓词获取相同记录,即W_m作为1e-06?如果没有,是否有可能做一个没有WHERE条件的SELECT *,然后手动检查该记录是否真的存在?