我有一张桌子
-------OT-----------
- id - INT -
- from_time - FLOAT-
- to_time - FLOAT-
--------------------
保存价值
- id - from_time -- to_time --
-------------------------
- 1 - 8.3 -- 12.3 --
-------------------------
我的SQL查询
SELECT * FROM (`OT` as wt) WHERE ( (12.3 < wt.to_time) );
预计它不会返回任何记录。 但它实际上返回了记录id = 1。
我尝试过0.3到15.3并且它是相同的但是16.6它没有返回记录。 我的MySQL版本是5.6.23。
请帮助我,为什么会这样?
答案 0 :(得分:6)
浮点精度不是精确的科学。您应该使用DECIMAL
数据类型而不是FLOAT
参考:https://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html
答案 1 :(得分:1)
@tuananh是绝对正确的。
因此,您可以更改列的类型或更改查询:
SELECT * FROM (`OT` as wt) WHERE ( 12.3 < CAST(wt.to_time AS DECIMAL(15,4)) );
http://sqlfiddle.com/#!9/01434/5
但是,更改列类型以简化将来的使用并提高您将创建的查询的性能会更好。如果你使用大量CAST
,它将减慢查询执行时间。