使用 between 发布过滤浮点值

Issue filtering float values using between

我有一个 table,带有来自图像 EXIF 数据的 GPS 坐标。当我使用 T-SQL between 查询数据时,我希望 returned 的记录不在结果集中。

在此示例中,1@threshold 值被过度夸大以清楚地显示问题。

declare @newGpsLat as float = 45.600344444447096
declare @newGpsLng as float = -122.59500833299424

declare @threshold as float = 1.0


select 
@newGpsLat + @threshold, 
@newGpsLat - @threshold,
@newGpsLng + @threshold,
@newGpsLng - @threshold

select tm.Id,tm.ExifGpsLatitude, tm.ExifGpsLongitude from TripMedia tm
where   tm.ExifGpsLatitude between (@newGpsLat - @threshold) and (@newGpsLat + @threshold)
and     tm.ExifGpsLatitude between (@newGpsLng - @threshold) and (@newGpsLng + @threshold)

select tm.Id, tm.ExifGpsLatitude, tm.ExifGpsLongitude from TripMedia tm

三个语句的结果是

---------------------- ---------------------- ---------------------- ----------------------
46.6003444444471       44.6003444444471       -121.595008332994      -123.595008332994

(1 row(s) affected)

Id          ExifGpsLatitude        ExifGpsLongitude
----------- ---------------------- ----------------------

(0 row(s) affected)

Id          ExifGpsLatitude        ExifGpsLongitude
----------- ---------------------- ----------------------
3           34.0472027778625       -118.437966666751
5           34.0727111111747       -118.358672222031
7           34.0327305560642       -118.451605555614
9           34.0319777774811       -118.455574999915
11          34.0473527781169       -118.437897222307
13          45.5958944447835       -122.591369444529
15          45.5907861110899       -122.593613888423
17          45.6003444444471       -122.595008332994

(8 row(s) affected)

我希望第二次查询 return ID 13、15 和 17,因为它们的 lat/lng 坐标在范围内。我错过了什么吗?

您在查询中有一个简单的拼写错误,第三行使用了 ExifGpsLatitude 而它应该是 ExifGpsLongitude:

select tm.Id,tm.ExifGpsLatitude, tm.ExifGpsLongitude from TripMedia tm
where   tm.ExifGpsLatitude between (@newGpsLat - @threshold) and (@newGpsLat + @threshold)
and     tm.ExifGpsLongitude between (@newGpsLng - @threshold) and (@newGpsLng + @threshold)

我想有时只需要第二双眼睛:)