如何 select 基于 PostgreSQL 中的两个值的特定行
How to select a specific row based on two values in PostgreSQL
我有一个很奇怪的问题。
我知道 table 的第一行有两列具有以下值:
纬度 = 35.6635
液化天然气 = 139.395
数据类型是REAL(我已经检查过了)。
我正在尝试通过以下查询 select 这些值:
select lat, lng from mytable where lat = 35.6635 and lng = 139.395
输出什么也没有,即我在 table.
中找不到值
知道这里有什么问题吗?
Postgres 中的 REAL
类型是不精确的,这意味着您在查询中使用的准确值实际上可能不会按原样存储。如果您需要精确存储,您应该使用 NUMERIC
或 DECIMAL
。有关精确和不精确数值类型的更多信息,请参阅 Postgres documentation。
作为查找记录的解决方法,您可以尝试:
select lat, lng
from mytable
where round(lat, 1) = 35.7 and round(lng, 1) = 139.4;
如果上面的查询 return 多于一条记录,希望您清楚要查找的是哪条记录。
您可以尝试类似的方法:
select lat, lng from mytable where lat > 35.6634 and lng > 139.394 and lat < 35.6636 and lng < 139.396
在计算机世界中,永远不要比较等效的浮点数
我有一个很奇怪的问题。 我知道 table 的第一行有两列具有以下值: 纬度 = 35.6635 液化天然气 = 139.395
数据类型是REAL(我已经检查过了)。
我正在尝试通过以下查询 select 这些值:
select lat, lng from mytable where lat = 35.6635 and lng = 139.395
输出什么也没有,即我在 table.
中找不到值知道这里有什么问题吗?
Postgres 中的 REAL
类型是不精确的,这意味着您在查询中使用的准确值实际上可能不会按原样存储。如果您需要精确存储,您应该使用 NUMERIC
或 DECIMAL
。有关精确和不精确数值类型的更多信息,请参阅 Postgres documentation。
作为查找记录的解决方法,您可以尝试:
select lat, lng
from mytable
where round(lat, 1) = 35.7 and round(lng, 1) = 139.4;
如果上面的查询 return 多于一条记录,希望您清楚要查找的是哪条记录。
您可以尝试类似的方法:
select lat, lng from mytable where lat > 35.6634 and lng > 139.394 and lat < 35.6636 and lng < 139.396
在计算机世界中,永远不要比较等效的浮点数