Ja, du kan skapa en lagrad funktion för detta ändamål. Något så här:
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 ;
Jag tror inte att det ger några hastighetsvinster men det är bra av alla de andra anledningarna du nämner:Läsbarhet, återanvändbarhet, enkel underhåll (föreställ dig att du hittar ett fel efter 2 år och du måste redigera koden om några (några) hundra platser).