¿Cómo comparar la notación científica y los números decimales en la función agregada MIN () de mysql?

StackOverflow https://stackoverflow.com/questions/8356104

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

¿Fue útil?

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
scroll top