代码如下
SELECT
maps,
case when maps then
ROUND(
6378.138 * 2 * ASIN(
SQRT(
POW(
SIN(
(
32.640351 * PI() / 180 - substring_index(maps, ",", - 1) * PI() / 180
) / 2
),
2
) + COS(32.640351 * PI() / 180) * COS(
substring_index(maps, ",", - 1) * PI() / 180
) * POW(
SIN(
(
117.013281 * PI() / 180 - substring_index(maps, ",", 1) * PI() / 180
) / 2
),
2
)
)
) * 1000
)
else '未知距离'
end distance
FROM
list
ORDER BY
distance ASC
目前我有一个list表,里面有个maps
字段是用来存放商家设置的经纬度xx,xx
,并在查询过程中,与当前位置的经纬度计算出距离,所以就有了distance
这个新字段,问题是,当前有的商家设置了经纬度,有的没有设置。
于是使用case when maps then...else '未知距离' end distance
区分了如果商家没有设置经纬度显示未知距离
有设置的商家显示计算好的距离
,当前需要解决的问题就是,我按这个方法区分后,就会造成排序无法按照距离大小排序,而变成了按数字顺序排序。如下
序号 | 距离 |
---|---|
1 | 1050 |
2 | 1160 |
3 | 35 |
4 | 362500 |
5 | 3700 |
如何才能按照数字正常排序,而字符串未知距离
放在数字距离下面呢?谢谢!~
慕尼黑8549860