Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Eine benutzerdefinierte MySQL-Funktion zur Berechnung der Haversine-Distanz?

Ja, Sie können zu diesem Zweck eine gespeicherte Funktion erstellen. Etwa so:

DELIMITER //
  DROP FUNCTION IF EXISTS Haversine //
  CREATE FUNCTION Haversine
    ( myLat FLOAT
    , myLong FLOAT
    , db_lat FLOAT
    , db_long FLOAT
    , unit VARCHAR(20)
    )
    RETURNS FLOAT
      DETERMINISTIC
    BEGIN
      DECLARE haver FLOAT ;

      IF unit = 'MILES'                    --- calculations
        SET haver = ...                --- calculations

      RETURN haver ;
    END  //
DELIMITER ;

Ich glaube nicht, dass es Geschwindigkeitsgewinne bietet, aber es ist gut für alle anderen Gründe, die Sie erwähnen:Lesbarkeit, Wiederverwendbarkeit, Wartungsfreundlichkeit (stellen Sie sich vor, Sie finden nach 2 Jahren einen Fehler und müssen den Code in (ein paar) Hunderten bearbeiten Orte).