MySQL - BETWEEN运算符与FLOAT(10,6)的作用类似于>和<,而不是> =和<=

tom*_*ods 7 mysql

我有一张纬度和经度的桌子.我成功地使用了BETWEEN子句,直到我遇到了搜索的值与数据库中的值相同的情况.在这些情况下,它不会返回结果.这是一个例子,其中:

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;
Run Code Online (Sandbox Code Playgroud)

返回:

"latitude"  "longitude"
"40.736561" "-74.033882"
"40.735619" "-74.030861"
Run Code Online (Sandbox Code Playgroud)

如果我使用BETWEEN CLAUSE(注意我甚至试过这个):

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)
Run Code Online (Sandbox Code Playgroud)

我得到0结果.哦,如果我为每个值Ex添加和/或减去0.000001,那么更多."BETWEEN(40.735619-0.00001)"等.如果我这样做,它会返回两个结果.

好吧,我会使用> =和<=但是我不明白为什么BETWEEN表现得像>和<在文档中时非常清楚:

如果expr大于或等于min且expr小于或等于max,则BETWEEN返回1

pod*_*ska 6

您应该使用十进制数据类型而不是浮点数.浮点值的相等性因此是不精确的