代码如下
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
如何才能按照数字正常排序,而字符串未知距离放在数字距离下面呢?谢谢!~
- 1 回答
- 0 关注
- 535 浏览
添加回答
举报
0/150
提交
取消