Проблема SQL-запроса: MySQL - PullRequest
0 голосов
/ 25 октября 2011

Следующий запрос возвращает ноль в MySQL. Я проверяю все вещи, как COS, ACOS индивидуально. Но этот запрос возвращает NULL. Пожалуйста, помогите мне. высота и широта - это географическое положение мест

select
acos(sin(74.338372290294) * sin(altitude) +
        cos(74.338372290294) * cos(altitude) *
        cos(latitude) - (31.552278760192)) as omg
from shk_resturants 

Ответы [ 2 ]

2 голосов
/ 25 октября 2011

Если любое из значений в вашей таблице (широта или высота) равно NULL, результат также может быть NULL. Попробуйте воспользоваться функцией

COALESCE(value, ...)

, например

select 
  acos(sin(74.338372290294) * sin(COALESCE(altitude, 0)) +
  cos(74.338372290294) * cos(COALESCE(altitude, 0)) *
  cos(COALESCE(latitude, 0)) - (31.552278760192)) as omg 
from shk_resturants

Возвращает 0 для столбцов с NULL-значениями.

См .: Операторы сравнения MySQL и: Математические функции MySQL

0 голосов
/ 25 октября 2011

acos (x) действителен только если

-1 <= x <= 1

Как видно здесь:

http://en.wikipedia.org/wiki/Inverse_trigonometric_function

Так что я предполагаю, что вы неправильно поставили круглые скобки. Возможно, вы хотели сделать что-то вроде

cos(latitude - (31.552278760192)) -- or
cos(latitude) - cos(31.552278760192)

в конце ...? Моя тригонометрия слишком ржавая, чтобы сказать ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...