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)