gpt4 book ai didi

mysql - MySQL存储函数中的Haversine

转载 作者:行者123 更新时间:2023-11-29 21:00:08 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

关于mysql - MySQL存储函数中的Haversine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37303268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com