3

「無効な浮動小数点演算が発生しました」というエラーが表示されます。このクエリを実行すると:

SELECT PolID, LocID, Address, City, StateCode, OrigGeoLat, OrigGeoLong, NewGeoLat, NewGeoLong, 
acos(sin(radians(OrigGeoLat)) * sin(radians(NewGeoLat)) +
        cos(radians(OrigGeoLat)) * cos(radians(NewGeoLat)) *
        cos(radians(OrigGeoLong - NewGeoLong))) * 6372.8  as Distance
FROM zzGeoDataTMP

*geoLatおよび*geoLongデータはすべてnumeric(18,10)として定義されています。クエリを実行すると、データの取得が開始され、特定のデータ行でエラーが発生します。たとえば、次の行は、ACOS関数が呼び出された場合にのみ、上記の例外をスローします。

OrigGeoLat|OrigGeoLong|NewGeoLat|NewGeoLong
---------------------------------------------
32.9364620|-80.0411000|32.9364620|-80.0411000

あなたが助けることができるかもしれないどんな洞察にも前もって感謝します!

4

1 に答える 1

9

計算中にいくつかの小さなエラーが蓄積されています。これは、計算された値(に渡されるACOS)が1よりわずかにROUND大きいことを意味します。呼び出しでラップしてみてください。

acos(ROUND(sin(radians(OrigGeoLat)) * sin(radians(NewGeoLat)) +
    cos(radians(OrigGeoLat)) * cos(radians(NewGeoLat)) *
    cos(radians(OrigGeoLong - NewGeoLong)),15)
    )

小数点以下15桁の精度しか維持していない場合。

于 2012-07-09T14:50:52.190 に答える