前言
最近使用空间点位查询数据时函数报错Incorrect arguments to st_distance_sphere报错。
发现问题
因为之前是没有问题的,所以把问题指向了数据,因为是外部数据,不是通过系统打点获取,发现是因为经纬度反了,location的字段存储的point数据,没有按照要求存储,错误的存储成POINT(纬度 经度),正确的应该存储城经度在前,纬度在后,正确的格式数据如下图
在point类型中范围是(-90,90),一旦经纬度反了就会报错。
解决问题
只需要将经纬度两个字段的数据项调换,再重新生成下location数据就可以了。
- 首先先查询出错误的经纬度数据,这样可以看到错误的数据有多少条
select * from table where longitude > 90
- 使用sql语句交换两列的值。这时候可以使用业务上没有数据的一列,或者加一列
UPDATE table
SET new = latitude, latitude= longitude , longitude = new , new = NULL
WHERE longitude > 90
最后再将location字段重新生成下就OK了