使用 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)
我想有时只需要第二双眼睛:)
我有一个 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)
我想有时只需要第二双眼睛:)