mysql - 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;
问题是我完全不明白。之前我用过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;
怎么把这个mysql指令转换成psql,所以用户的经纬度就是startlng
and startlat
?
解决方案
不对计算本身发表评论,这个 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;
推荐阅读
- delphi - 快速更新数组更少的行
- sml - 如何在两个整数范围内进行嵌套 for 循环?
- npm - vscode中的npm版本与安装版本不同
- r - 从 for 循环返回了一个额外的打印结果“[1] 36”:如何删除它?
- javascript - javascript在同一页面上多次
- apache-kafka - Logstash & Kafka - java.io.EOFException: null。节点 -1 断开连接
- mysql - 不同行的列总和
- servicestack-text - ServiceStack.Text FromJson 和 EmitLowercaseUnderscoreNames
- html - 使用锚链接时,有没有办法定位页面上显示部分的位置?
- c# - 如何从网站上的文本中获取信息并在 C# 中传输到字符串变量