Я использовал следующий sql для mySQL, но теперь мне нужно использовать это для базы данных Firebird. Я искал и читал документацию Firebird, но не мог найти альтернативы. В радианах Firebird и «пределе» оба не поддерживаются. Кто-нибудь успешно сделал подобное в Firebird?Формула Хаверсина в базе данных Firebird
SELECT zip, (3959 * acos(cos(radians(38.6285426)) * cos(radians(lat))
* cos(radians(lng) - radians(-86.05296039999999)) + sin(radians(38.6285426)) * sin(radians(lat)))) AS distance
FROM zipcodes
HAVING distance < 25
ORDER BY distance
LIMIT 0 , 20;
Хотя я полностью ценю ваш ответ, я, вероятно, должен был подробно рассказать о своем вопросе. Да, я понимаю математику и да, это простая математика. mySQL возвращает все мои zipcodes в пределах 25 миль с помощью одного простого запроса. Мой вопрос, наверное, должен был состоять в том, что у firebird нет аналогичного варианта, без необходимости делать некоторые дополнительные дополнительные функции и вычисления и делать вещи более сложными, чем они должны быть, чтобы получить тот же результат. –
IMO, создающая представление, которое имеет 'lat' и' lng' в качестве радианов, довольно простое и делает окончательный запрос более приятным (вместо 'radians (nn.mmm)' у вас есть только 'lat' или' lng'). Но вы также можете создать UDF для функции radians, если вы предпочитаете это ... но вы не можете использовать MySQL-запрос, как в Firebird, no. – ain
Sidenote: Если вы используете Firebird 3, вы также можете создать UDF, не создавая собственную библиотеку для предоставления функции. –