首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql compare floats with in子句

mysql compare floats with in子句
EN

Stack Overflow用户
提问于 2013-06-18 02:30:13
回答 1查看 308关注 0票数 0

我在一个表中有类型为float的列。

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

WHen比较一个值,我使用LIKE子句,因为mysql中的浮点数不能用等号比较。

但是,在与值数组进行比较时,我使用IN子句,这对我不起作用。

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

EN

回答 1

Stack Overflow用户

发布于 2013-06-18 02:52:50

你在比较浮点型数据时遇到的问题不是“不能用等号进行比较”。问题是所有的浮点值都是近似值,=运算符不做近似值,只做精确相等。IN运算符也是如此。

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

代码语言:javascript
复制
 value BETWEEN target-epsilon AND target+epsilon

其中epsilon大约是0.0001。

相应地,做

代码语言:javascript
复制
  value IN (target1, target2, target3)

很难让它可靠地工作。你没有提到你在你的浮点值中存储的是什么类型的数字。但是,让我们假设它们是纬度值,看起来像这样: 42.79842367778193。现在,很明显,42.7984237已经足够接近了,可以在这里被认为是相等的。

所以你可以做这样的事情。

代码语言:javascript
复制
CAST(10000.0 * latitude AS INT) IN 
     (CAST(10000.0 * 42.7984237 AS INT),  CAST(10000.0 * 43.1234567 AS INT))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17154312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档