sql >> Databasteknik >  >> RDS >> Mysql

En anpassad MySQL-funktion för att beräkna Haversine-avståndet?

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).




  1. Optimera SQL som använder mellan-sats

  2. * Okänt fält på:databas Menade du?:- statistik - server - loggning - DROPWIZARD

  3. Hur RIGHT()-funktionen fungerar i SQL Server (T-SQL)

  4. SQLite JSON_EXTRACT()