sql - 在 HiveSQL 中使用等号将 double 与 int 进行比较是否正确?
问题描述
我想将 adouble
与Hive 中的int
using进行比较。=
例如,假设字段score
类型为 ,使用 与整数进行double
比较是否正确?像这样:score
=
SELECT * FROM test_table
WHERE score = 3
解决方案
嗯,它在语法上很好。事实上,“3”实际上是什么取决于数据库——通常没有小数的数字常量被解析为整数或数字。Hive 将它们解析为整数(如果它们更大,则为 bigints)。
浮点表示可以精确地表示小整数。因此,您可以进行完全匹配。有小数点的时候就比较麻烦了。因此,看起来像的值3.1415916
可能无法进行此比较:
where val = 3.1415916
因为不准确。
更常见的是,比较应该在一定的公差范围内,例如:
where abs(val - 3) <= 0.00001
总之。如果您关心平等,请不要使用浮点数。根据定义,它们是不精确的(即,看起来相同的两个值可能具有不同的二进制表示形式)。更好的选择是整数或数字/十进制类型。
推荐阅读
- azure-active-directory - 有关 Azure AD 应用程序代理连接器系统要求的问题
- python - Python 警告
- c# - 控制台程序在代码完成之前无缘无故关闭
- php - 如何在 laravel 框架中使用数组和 json 对象?
- excel - 如何粘贴到右边的下一个空单元格?
- python - 如何将变量的全部数据写入 .csv 文件?
- javascript - 启动 Meteor 应用程序时出错 + react (static-html)
- html - 如何在不移动其他所有内容的情况下移动文本?
- javascript - Node.js - 在“连接”事件中区分服务器连接和断开连接
- python - 缺少潜在参数时出错。Python、烧瓶、Graphql