我要创建一个存储函数来计算两点之间的距离。但是我不能让它起作用。这是我目前正在使用的代码。
DROP FUNCTION `haversine`//
CREATE DEFINER=`-----`@`%` FUNCTION `haversine`(givenLat DOUBLE, givenLong DOUBLE) RETURNS double
DETERMINISTIC
BEGIN
DECLARE dist double;
DECLARE longitude varchar(255);
DECLARE latitude varchar(255);
SET longitude = 'Longitude';
SET latitude = 'Latitude';
SET dist = (6371 * acos( cos( radians
(givenLat) ) * cos( radians
( latitude ) ) * cos( radians
( givenLong ) - radians
(longitude) ) + sin( radians
(givenLat) ) * sin( radians
( latitude ) ) ));
RETURN dist;
END以下查询不返回任何结果,而应该返回某些内容。
SELECT id FROM location_address WHERE haversine(lat, long) < 30;因为当我这么做的时候(同样的?)查询手动返回结果:
SELECT id, (6371 * acos( cos( radians
(lat) ) * cos( radians
( Latitude ) ) * cos( radians
( long ) - radians
(Longitude) ) + sin( radians
(lat) ) * sin( radians
( Latitude ) ) )) AS distance
FROM table HAVING distance < 30当然,我使用了相同的坐标来尝试这两个查询,我真的不明白为什么这个函数不会产生任何结果。
我真的需要一个存储函数才能执行查询。
发布于 2016-05-19 10:50:26
我仍然不知道它为什么工作,但是将列名直接传递给函数,因为给定的参数起作用,而不是在函数本身中声明它们。
https://stackoverflow.com/questions/37303268
复制相似问题