首页 > 解决方案 > 在 HiveSQL 中使用等号将 double 与 int 进行比较是否正确?

问题描述

我想将 adouble与Hive 中的intusing进行比较。=例如,假设字段score类型为 ,使用 与整数进行double比较是否正确?像这样:score=

SELECT * FROM test_table
WHERE score = 3

标签: sqlhive

解决方案


嗯,它在语法上很好。事实上,“3”实际上是什么取决于数据库——通常没有小数的数字常量被解析为整数或数字。Hive 将它们解析为整数(如果它们更大,则为 bigints)。

浮点表示可以精确地表示小整数。因此,您可以进行完全匹配。有小数点的时候就比较麻烦了。因此,看起来像的值3.1415916可能无法进行此比较:

where val = 3.1415916

因为不准确。

更常见的是,比较应该在一定的公差范围内,例如:

where abs(val - 3) <= 0.00001

总之。如果您关心平等,请不要使用浮点数。根据定义,它们是不精确的(即,看起来相同的两个值可能具有不同的二进制表示形式)。更好的选择是整数或数字/十进制类型。


推荐阅读