Результат для этого запроса: 6371
:
SELECT (
SIN(PI()*51.0026829600855/180.0)*SIN(PI()*51.0026829600855/180.0)+COS(PI()
*51.0026829600855/180.0)*COS(PI()*51.0026829600855/180.0)*COS(PI()
*13.7910680057092/180.0-PI()*13.7910680057092/180.0)
)*6371
AS foo
Однако, 6371
не имеет права на ACOS
.ACOS
должно быть меньше или равно 1
.
Например:
SELECT ACOS(1) -- OK
SELECT ACOS(1.1) -- An invalid floating point operation occurred.
ОБНОВЛЕНИЕ:
Этот запрос может вернутьзначение больше 1. Поэтому попробуйте использовать оператор CASE
:
SELECT
(
ACOS
(
CASE WHEN
(SIN(PI()*51.0026829600855/180.0)*SIN(PI()*51.0026829600855/180.0)
+COS(PI()*51.0026829600855/180.0)*COS(PI()*51.0026829600855/180.0)
*COS(PI()*13.7910680057092/180.0-PI()*13.7910680057092/180.0)) > 1
THEN 1
ELSE
(SIN(PI()*51.0026829600855/180.0)*SIN(PI()*51.0026829600855/180.0)
+COS(PI()*51.0026829600855/180.0)*COS(PI()*51.0026829600855/180.0)
*COS(PI()*13.7910680057092/180.0-PI()*13.7910680057092/180.0))
END
)
*6371) AS foo