0

我正在尝试创建一个用于计算两个纬度/经度点之间距离的函数;但是,CREATE FUNCTIONEND 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
4

2 回答 2

0

您可能忘记在末尾添加分隔符,然后切换回标准分隔符:

将最后一行替换为以下代码:

END$$
DELIMITER ;
于 2013-05-12T14:12:18.950 回答
0

我刚刚注意到 ELSE 和 IF 之间的空格。我的错。删除了这些,它的工作原理。

于 2013-05-12T14:14:11.847 回答