我正在尝试创建一个计算两个纬度/经度点之间距离的函数;但是,CREATE FUNCTION在函数体的END IF;
部分中断(通过删除IF/ELSE/END
块确认)。
有什么想法吗?我想保持M / KM的差异,以节省在应用程序中添加计算。
DELIMITER $$
CREATE FUNCTION HAVERSINE
(
from_latitude DECIMAL(30, 15),
from_longitude DECIMAL(30, 15),
to_latitude DECIMAL(30, 15),
to_longitude DECIMAL(30, 15),
unit VARCHAR(20)
)
RETURNS DECIMAL(30, 15)
DETERMINISTIC
BEGIN
DECLARE radius DECIMAL(30, 5);
DECLARE distance DECIMAL(30, 15);
IF(unit = 'MILES') THEN SET radius = '3959';
ELSE IF(unit = 'KILOMETRES' OR unit = 'KM') THEN SET radius = '6371.3929';
ELSE SET radius = '3959';
END IF;
SET distance = (
radius *
ACOS(
COS(RADIANS(from_latitude)) *
COS(RADIANS(to_latitude)) *
COS(RADIANS(to_longitude) - RADIANS(from_longitude)) +
SIN(RADIANS(from_latitude)) *
SIN(RADIANS(to_latitide))
)
);
RETURN distance;
END
答案 0 :(得分:0)
您可能忘记在末尾添加分隔符,然后切换回标准分隔符:
使用以下代码替换最后一行:
END$$
DELIMITER ;
答案 1 :(得分:0)
我刚注意到ELSE和IF之间的空格。我的错。删除了它们并且它有效。