作者:婉婷雅铃43 | 来源:互联网 | 2023-09-12 12:21
代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| 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表,里面有个
字段是用来存放商家设置的经纬度
,并在查询过程中,与当前位置的经纬度计算出距离,所以就有了
这个新字段,问题是,当前有的商家设置了经纬度,有的没有设置。
于是使用
1
| case when maps then...else '未知距离' end distance |
区分了如果商家没有设置经纬度显示
有设置的商家显示
,当前需要解决的问题就是,我按这个方法区分后,就会造成排序无法按照距离大小排序,而变成了按数字顺序排序。如下
序号 |
距离 |
---|
1 |
1050 |
2 |
1160 |
3 |
35 |
4 |
362500 |
5 |
3700 |
如何才能按照数字正常排序,而字符串
放在数字距离下面呢?谢谢!~