我发现了许多类似的帖子,甚至试图找出如何在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 )
是否为负?
答案 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