sql >> Base de Datos >  >> RDS >> Mysql

¿Una función MySQL personalizada para calcular la distancia Haversine?

Sí, puede crear una función almacenada para este propósito. Algo como esto:

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 ;

No creo que ofrezca ganancias de velocidad, pero es bueno por todas las otras razones que mencionas:legibilidad, reutilización, facilidad de mantenimiento (imagina que encuentras un error después de 2 años y tienes que editar el código en unos (unos) cientos lugares).