0

2 つの緯度/経度ポイント間の距離を計算する関数を作成しようとしています。END IF;ただし、関数本体の部分でCREATE FUNCTION が壊れています (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 に答える