sql >> Database teknologi >  >> RDS >> Mysql

Hvorfor returnerer denne sql-forespørgsel ingen resultater ved sammenligning af flydende kommatal?

Det er generelt ikke en god idé at sammenligne flydende kommatal med = er lig med operator.

Til din ansøgning skal du overveje, hvor tæt du vil have svaret.

1 grad er omkring 112 km, og 0,00001 grader er omkring 1,1 meter (ved ækvator). Vil du virkelig have din ansøgning til at sige "ikke ens", hvis to punkter er forskellige med 0,00000001 grader =1 mm?

set @EPSLION = 0.00001  /* 1.1 metres at equator */

SELECT * FROM location_forslag 
WHERE `lngitude` >= 13.8461208 [email protected] 
AND `lngitude` <= 13.8461208 + @EPSILON

Dette vil returnere punkter, hvor længdegraden er inden for @epsilon grader af den ønskede værdi. Du bør vælge en værdi for epsilon, der passer til din applikation.



  1. Vælg hvor rækkenummer =rækkenummer

  2. Hvordan bestemmer du, hvilke SQL-tabeller der har en identitetskolonne programmatisk

  3. PostgreSQL:IKKE IN versus UNDTAGET ydelsesforskel (redigeret #2)

  4. Laravel classloader.php fejl kunne åbne stream:Ingen sådan fil eller mappe