MySQL CREATE FUNCTION打破END IF

时间:2013-05-12 14:07:22

标签: mysql function haversine

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

2 个答案:

答案 0 :(得分:0)

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

使用以下代码替换最后一行:

END$$
DELIMITER ;

答案 1 :(得分:0)

我刚注意到ELSE和IF之间的空格。我的错。删除了它们并且它有效。