Mam tabelę o szerokościach i długościach geograficznych lokalizacji. Używałem klauzuli BETWEEN, dopóki nie dotarłem do przypadków, w których szukane wartości są takie same, jak te w bazie danych. W takich przypadkach nie zwraca wyników. Oto przykład, gdzie jako:MySQL - POMIĘDZY operatorem FLOAT (10,6) działa jak> i <, zamiast> = i <=
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;
Powroty:
"latitude" "longitude"
"40.736561" "-74.033882"
"40.735619" "-74.030861"
Jeśli używam MIĘDZY punkt (Zauważ, ja nawet nie próbował 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)
otrzymuję 0 wyniki. Och, co więcej, jeśli dodaję i/lub odejmuję 0,000001 do każdej wartości Ex. "MIĘDZY (40.735619-0.00001)" itd. Jeśli to zrobię, spowoduje to zwrócenie dwóch wyników.
dzieła, użyję> = i < = ale co ja nie rozumiem dlaczego MIĘDZY działa jak> i < gdy w docs jej całkiem jasne:
Jeśli wyrażenie jest większe niż lub równy min i expr jest mniejszy lub równy max, BETWEEN zwraca 1
Dzięki! Zmiana typu danych na dziesiętne (10,6) dała podstęp. Więc domyślam się, że to było zaokrąglanie wartości z db do góry, aby były poza zasięgiem i nie były równe? Co mnie zabija, to dlaczego BETWEEN zaokrąglałoby inaczej niż "> = <=". Domyśl. – tomwoods