mysql将浮点数与in子句进行比较

时间:2013-06-17 18:30:13

标签: mysql

我在表格中有float类型的列。

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

当比较一个值时,我使用LIKE子句作为mysql中的浮点数无法使用等号进行比较。

然而,当与值数组进行比较时,我使用IN子句,这对我不起作用。

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

1 个答案:

答案 0 :(得分:1)

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

处理浮动比较的大多数人都使用这样的东西:

 value BETWEEN target-epsilon AND target+epsilon

其中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))