mysql比较float与in子句

mysql比较float与in子句,mysql,Mysql,表中有float类型的列 我有一个查询,它接收一个值或一个值数组,与其中一列进行比较,并返回包含该值或存在于值数组中的所有行 在比较一个值时,我使用LIKE子句,因为mysql中的浮点不能使用等号进行比较 但是,当与值数组进行比较时,我使用IN子句,这对我来说并不适用 如何使用IN子句比较浮点?比较浮点数据的问题不是“不能使用等号进行比较”。问题是所有浮点值都是近似值,并且=运算符不进行近似,只进行精确相等。IN运算符也是如此 大多数处理浮点比较的人都会使用类似的方法: value BETWE

表中有float类型的列

我有一个查询,它接收一个值或一个值数组,与其中一列进行比较,并返回包含该值或存在于值数组中的所有行

在比较一个值时,我使用LIKE子句,因为mysql中的浮点不能使用等号进行比较

但是,当与值数组进行比较时,我使用IN子句,这对我来说并不适用


如何使用IN子句比较浮点?

比较浮点数据的问题不是“不能使用等号进行比较”。问题是所有浮点值都是近似值,并且=运算符不进行近似,只进行精确相等。IN运算符也是如此

大多数处理浮点比较的人都会使用类似的方法:

 value BETWEEN target-epsilon AND target+epsilon
其中ε大约是0.0001

因此,

  value IN (target1, target2, target3)
很难使工作可靠。你没有提到你在浮点数中储存了什么样的数字。但是,让我们假设它们是纬度值,看起来像这样:42.79842367778193。很明显,42.7984237很接近,在这里可以认为是相等的

所以你可以做这种事情

CAST(10000.0 * latitude AS INT) IN 
     (CAST(10000.0 * 42.7984237 AS INT),  CAST(10000.0 * 43.1234567 AS INT))

为了运行查询,不能强制转换为其他数据类型吗?