Where子句无结果

时间:2018-08-13 01:48:21

标签: sql postgresql precision where-clause

我在双精度列上使用SQL查询,但没有得到任何结果。

select *
from chicago_2po_4pgr
where f_estimated=38867.0150708261

我确定存在f_estimated=38867.0150708261行。

我试图修改查询并使用enter link description here中提到的解决方案,但只有在将=更改为<或>时,它才有效。 我需要知道具有该值的确切行。

请问我如何获得这一行?

2 个答案:

答案 0 :(得分:0)

正如上面的评论所提到的,您不能与浮点数据类型进行直接比较。

相反,在进行比较之前,尝试将double precision转换为numeric类型:

select * from chicago_2po_4pgr
where cast(f_estimated::numeric)=38867.0150708261

答案 1 :(得分:0)

这是因为常量的类型为数字(精确),但列为浮点型。这些可能会有一些小的差异。

一种方法是将它们转换为相同类型。 可能可以运行:

select *
from chicago_2po_4pgr
where f_estimated = 38867.0150708261::double precision

但是,这可能无法推广。一种更安全的方法是:

select *
from chicago_2po_4pgr
where abs(f_estimated - 38867.0150708261) < 0.0001

或任何合理的阈值。

最安全的方法是完全放弃双精度。将值表示为数字(首先想到的是类似numeric(20, 10)的东西。然后您可以进行精确比较。