我在双精度列上使用SQL查询,但没有得到任何结果。
select *
from chicago_2po_4pgr
where f_estimated=38867.0150708261
我确定存在f_estimated=38867.0150708261
行。
我试图修改查询并使用enter link description here中提到的解决方案,但只有在将=更改为<或>时,它才有效。 我需要知道具有该值的确切行。
请问我如何获得这一行?
答案 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)
的东西。然后您可以进行精确比较。