Tengo una tabla con latitudes y longitudes de ubicaciones. Estaba usando la cláusula BETWEEN con éxito hasta que llegué a casos en los que los valores que se buscaban eran los mismos que en la base de datos. En estos casos, no devuelve resultados. Este es un ejemplo, donde como:MySQL - El operador BETWEEN con FLOAT (10,6) actúa como> y <, en lugar de> = y <=
SELECT
`Location`.`latitude`,
`Location`.`longitude`
FROM
`locations` AS `Location`
WHERE `latitude` >= 40.735619
AND `latitude` <= 40.736561
AND `longitude` >= -74.033882
AND `longitude` <= -74.030861;
Devuelve:
"latitude" "longitude"
"40.736561" "-74.033882"
"40.735619" "-74.030861"
Si utilizo la cláusula BETWEEN (Nótese Incluso he intentado this):
SELECT
`Location`.`latitude`,
`Location`.`longitude`
FROM
`locations` AS `Location`
WHERE `latitude` BETWEEN LEAST(40.735619, 40.736561)
AND GREATEST(40.736561, 40.735619)
AND `longitude` BETWEEN LEAST(- 74.033882, - 74.030861)
AND GREATEST(- 74.030861, - 74.033882)
consigo 0 resultados. Oh, qué más, si agrego y/o resta 0.000001 a cada valor Ej. "BETWEEN (40.735619-0.00001)", etc. Si lo hago, devuelve los dos resultados.
bien, voy a utilizar> = y = < pero lo que no entiendo es por qué medio está actuando como> y < cuando en el docs es bastante claro:
Si expr es mayor que o igual a min y expr es menor o igual que max, BETWEEN devuelve 1
Gracias! Cambiar el tipo de datos a decimal (10,6) hizo el truco. Así que supongo que lo que sucedía era que estaba redondeando los valores del db para que estuvieran fuera del rango y ya no fueran iguales. Lo que me mata es por qué BETWEEN se redondearía de forma diferente a "> = <=". Imagínate. – tomwoods