DECLARE @Lat1 AS DECIMAL(9,5)
DECLARE @Lon1 AS DECIMAL(9,5)
DECLARE @Radius AS DECIMAL(9,5)
SET @Lat1 = '32.74'
SET @Lon1 = '-117.20'
SET @Radius = 3960
declare @CC decimal(9,5),@CS decimal(9,5),@rlat decimal(9,5),@slat decimal(9,5)
Select
@CC = cos(RADIANS(@Lat1))*cos(RADIANS(@Lon1))
, @CS = cos(RADIANS(@Lat1))*sin(RADIANS(@Lon1))
, @slat = Sin(radians(@lat1))
SELECT
call_id, dtservertime, sdisconnectreason,
icompleted, Geolat, Geolong, sZipCode
FROM
(SELECT
call_id, dtServerTime, sDisconnectReason,
iCompleted, Geolat, Geolong, sZipCode
,convert(decimal(9,5),radians(geoLat)) as Rlat
,convert(decimal(9,5),radians(geoLong)) as Rlong
FROM
dbo.vMarketing) as x
WHERE
x.dtservertime >= '1/1/2016' and
(acos(
@cc*(cos(rlat)*cos(RLONG))
+ @cs*(cos(RLAT)*sin(RLONG))
+ @SLat*sin(RLAT)
) * @Radius
) < 8
Я продолжаю получать ошибку по этому запросу, указав, что произошла недопустимая операция с плавающей запятой.SQL Haversine Formula
Что не так ???
Значение передается в 'acos' функция вне диапазона, как объяснено в ответе, который вызывает эта ошибка с плавающей запятой. – Sunil
Реальный вопрос: зачем внедрять формулу Хаверсина в T-SQL вообще? Начиная с SQL 2008, у нас был тип данных географии, который позволит вам вычислить расстояние между двумя точками. –