首页 > 解决方案 > mysql 和 psql 语法的区别——寻找最近的地理坐标

问题描述

我找到了一个看起来像这样的 psql 代码:

select * from (
SELECT *,( 3959 * acos( cos( radians(6.414478) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(12.466646) ) + sin( radians(6.414478) ) * sin( radians( lat ) ) ) ) AS distance
FROM station_location
) al
where distance < 5
ORDER BY distance
LIMIT 20;

在postgresql中按经纬度查找最近的位置

问题是我完全不明白。之前我用过mysql,语法完全不一样:

SELECT latitude, longitude, SQRT(
POW(69.1 * (latitude - [startlat]), 2) +
POW(69.1 * ([startlng] - longitude) * COS(latitude / 57.3), 2)) AS distance
FROM TableName HAVING distance < 25 ORDER BY distance;

使用 SQL 查询查找最近的纬度/经度

怎么把这个mysql指令转换成psql,所以用户的经纬度就是startlngand startlat

标签: mysqlpostgresqlgeolocationcoordinatespsql

解决方案


不对计算本身发表评论,这个 PostgreSQL 的“端口”应该可以工作:

select * from (select SQRT(
POW(69.1 * (10 - 8), 2) +
POW(69.1 * (100 - 10) * COS(10 / 57.3), 2)) AS distance
from table) d where distance < 25 ORDER BY distance;

推荐阅读