MySQL - 使用BETWEEN搜索负经度值

时间:2012-04-02 18:40:22

标签: mysql select latitude-longitude

我发现了许多类似的帖子,甚至试图找出如何在MySQL中处理负值,但无济于事。

我有一个网站,我正在使用Google地图,并且作为性能增强,我将地图上绘制的标记限制为地图边界内的标记。

我想开发一个可以使用正{0}和latitude值的查询。

对于数据库:

longitude

查询:

latitude FLOAT( 10, 6 )
longitude FLOAT( 10, 6 )

如果我删除了SELECT * FROM `table` WHERE `latitude` BETWEEN 47.926930 AND 47.929806 AND `longitude` BETWEEN -97.077303 AND -97.083997 的{​​{1}}子句,我会得到结果,但是没有BETWEEN约束的情况不正确。

我试过这个:

longitude

哪个有效,但仅适用于负longitude值。

我是否需要检查AND -`longitude` BETWEEN ABS( -97.077303 ) AND ABS( -97.083997 ) 是否为负?

3 个答案:

答案 0 :(得分:11)

您还可以使用greatest()least()功能,因此您无需担心参数。例如:

SELECT * FROM table
WHERE latitude BETWEEN least(@lat1, @lat2) AND greatest(@lat1, @lat2)
AND  longitude BETWEEN least(@lon1, @lon2) AND greatest(@lon1, @lon2)

答案 1 :(得分:4)

between期望格式为somefield BETWEEN lowervalue AND highervalue。您的负经度会切换更高/更低的值。它应该是

AND longitude BETWEEN -97.083997 AND -97.077303

负97.08实际上低于负97.07

答案 2 :(得分:2)

检查数字行上的负数。 :)

SELECT *
FROM `table` 
WHERE `latitude` BETWEEN 47.926930 AND 47.929806 
  AND `longitude` BETWEEN -97.083997 AND -97.077303