如何使用MySQL将经纬度十进制值转换为POINT类型?
解决MySQL中经纬度转POINT类型的UPDATE语法问题
你的两条UPDATE语句报错是因为MySQL不支持UPDATE ... FROM ...这种语法(这是PostgreSQL等其他数据库的写法),针对你的需求,提供两种正确写法:
1. 单表直接更新(推荐,无重复zipcode时使用)
因为每个邮政编码对应唯一的经纬度,无需自连接,直接用当前行的longitude和latitude生成POINT:
UPDATE obe_zipcodes SET geo_point = POINT(longitude, latitude);
2. 自连接更新(适用于存在重复zipcode需要关联更新的场景)
如果必须通过自关联匹配数据,MySQL的正确语法是使用JOIN关键字:
UPDATE obe_zipcodes w1 JOIN obe_zipcodes w2 ON w1.zipcode = w2.zipcode SET w1.geo_point = POINT(w2.longitude, w2.latitude);
补充说明:
- MySQL的
POINT()函数参数格式为POINT(x, y),通常经度(longitude)作为x值,纬度(latitude)作为y值,你的参数顺序是正确的。 - 你的表使用InnoDB引擎,完全支持
POINT空间类型,无需额外配置。
内容的提问来源于stack exchange,提问作者Michael Parisi
相关产品推荐
相关产品推荐

