MySQL查询拉取一定范围内的经度

MySQL query to pull longitude within certain range

我有一个查询使用了一个简单的 WHERE logitude != '0' 我虽然足以只提取已成功地理编码的记录。

我无法控制质量,也无法控制地址是否已成功地理编码,因为 table 是只读的。我只能控制我的查询。

经度通常最多保留6位小数:-81.729345

纬度和经度列的数据类型为十进制,长度为 9,小数位数为 6。

我想我需要确保我只 select 在一定的经度范围内记录?

我试过这个:经度在“-89.69%”和“-72.07%”之间有和没有 %

但它 returns 所有记录,所以我知道它是错误的,因为某些记录的地理编码不正确(例如:14.359164)。

如何 select 仅在该范围内并允许任意小数位?

这是 latitude/longitude 列的片段:

26.219295   -81.722585
26.280398   -81.629169
26.134763   -81.795894
26.1255 -81.788166
26.403096   -81.787194
26.1219 -81.793919
26.247832   -81.82119
26.22877    -81.795777
26.25278    -81.78444
26.319679   -81.731197
26.02094    -81.685416
26.364607   -81.817356
25.9351 -81.723069
26.392275   -81.818925
40.903837   14.359164

latitudelongitude 列通常具有 FLOATDOUBLE 数据类型。他们很少有 DECIMAL(10,4) 数据类型,有时面对所有的理由和逻辑,他们有 VARCHAR(15) 或某种这样的数据类型。

如果您的是 FLOATDOUBLE,您的比较是通过算术而不是文本模式匹配完成的。所以你想要这种 WHERE 子句。

WHERE Longitude BETWEEN -89.69 AND -72.07   

这将捕获 -89.69、-72.07 以及介于两者之间的所有值。

这也适用于 DECIMAL 数据类型。如果您有 varchar 经度数据,最好的办法是将其更改为 FLOAT。如果做不到,你想要

 WHERE  CAST(longitude AS DECIMAL(10,4))  BETWEEN -89.69 AND -72.07

但这会有 糟糕的 性能。

% 通配符仅适用于字符数据类型,并且仅适用于 LIKE 比较。