¿Cómo comparar la notación científica y los números decimales en la función agregada MIN () de mysql?
-
27-10-2019 - |
Pregunta
¿Cómo puedo aplicar mysql MIN () sobre valores decimales mixtos y valores de notación científica?Necesito obtener la distancia mínima usando la ecuación de latitud y longitud en una consulta de mysql con MIN ().Está funcionando si la distancia es decimal.Pero no funciona correctamente, si algunas distancias son demasiado pequeñas como "5.89872212195226e-05"
El problema es MIN (4,5.89872212195226e-05) en una consulta mysql siempre devolverá '4'.
Aquí está la parte de la consulta
MIN (
(acos(sin((".$searchLat."*pi()/180)) *
sin((b_loc.locLatitude*pi()/180))+cos((".$searchLat."*pi()/180)) *
cos((b_loc.locLatitude*pi()/180))
* cos(((".$searchlng."- b_loc.locLongitude)*pi()/180))))*180/pi())*60*1.1515
) as mindistance
¿Alguna solución?Gracias
Solución
La conversión a decimal debería ayudar: -
mysql> select cast( "5.89872212195226e-05" as decimal(65,30)); +--------------------------------------------------+ | cast( "5.89872212195226e-05" as decimal(65,30)) | +--------------------------------------------------+ | 0.000058987221219522600000000000 | +--------------------------------------------------+
Ejemplo de comparación: -
mysql> select least( 4, cast("5.89872212195226e-05" as decimal(65,30)) ); +------------------------------------------------------------+ | least( 4, cast("5.89872212195226e-05" as decimal(65,30)) ) | +------------------------------------------------------------+ | 0.000058987221219522600000000000 | +------------------------------------------------------------+
Ejemplo de uso: -
MIN(cast( ... as decimal(65,30)))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow