首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL存储函数中的Haversine

MySQL存储函数中的Haversine
EN

Stack Overflow用户
提问于 2016-05-18 14:55:47
回答 1查看 527关注 0票数 0

我要创建一个存储函数来计算两点之间的距离。但是我不能让它起作用。这是我目前正在使用的代码。

代码语言:javascript
复制
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

以下查询不返回任何结果,而应该返回某些内容。

代码语言:javascript
复制
SELECT id FROM location_address WHERE haversine(lat, long) < 30;

因为当我这么做的时候(同样的?)查询手动返回结果:

代码语言:javascript
复制
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

当然,我使用了相同的坐标来尝试这两个查询,我真的不明白为什么这个函数不会产生任何结果。

我真的需要一个存储函数才能执行查询。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-19 10:50:26

我仍然不知道它为什么工作,但是将列名直接传递给函数,因为给定的参数起作用,而不是在函数本身中声明它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37303268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档