ACOS 函数的 SQL 2012 错误
问题描述:
我在 SQL Server 2012 ACOS 函数中遇到了这个错误:
I run into this bug in SQL Server 2012 ACOS function:
declare @lat1 decimal(12,10), @lon1 decimal(12,10), @lat2 decimal(12,10), @lon2 decimal(12,10)
declare @dist float
select @lat1=51.1790825000, @lon1= 4.1590020000, @lat2= 51.1790825000, @lon2= 4.1590020000
set @dist = SIN(RADIANS(@lat1)) * SIN(RADIANS(@lat2)) + COS(RADIANS(@lat1)) * COS(RADIANS(@lat2)) * COS(RADIANS(@lon1 - @lon2))
print @dist
print ACOS(1)
print ACOS(@dist)
最后一个打印函数给出了发生无效的浮点运算".这在 SQL Server 2008 中运行良好
The last print function gives an "An invalid floating point operation occurred." This works fine in SQL Server 2008
弗拉德
答
您似乎正在尝试计算地球上两点之间的距离.使用内置的地理类型,让您的生活更轻松.
It looks like you're trying to calculate the distance between two points on the Earth. Make your life easier and use the built-in geography type.
DECLARE @lat1 DECIMAL(12, 10) ,
@lon1 DECIMAL(12, 10) ,
@lat2 DECIMAL(12, 10) ,
@lon2 DECIMAL(12, 10)
DECLARE @dist FLOAT
SELECT @lat1 = 51.1790825000 ,
@lon1 = 4.1590020000 ,
@lat2 = 51.1790825000 ,
@lon2 = 4.1590020000
DECLARE @p1 GEOGRAPHY = GEOGRAPHY::Point(@lat1, @lon1, 4326) ,
@p2 GEOGRAPHY = GEOGRAPHY::Point(@lat2, @lon2, 4326)
SELECT @dist = @p1.STDistance(@p2)