史上最全的使用Mysql计算两点之间的距离保留后面小数点的问题

在Mysql里计算两点之间的距离一般我们使用的sql如下:

6378.140 * 2 * ASIN(
                    SQRT(
                        POW(
                            SIN(
                                (
                                    39.904989 * PI() / 180 - 表名.lat * PI() / 180
                                ) / 2
                            ),
                            2
                        ) + COS(39.904989 * PI() / 180) * COS(表名.lat * PI() / 180) * POW(
                            SIN(
                                (
                                    116.405285 * PI() / 180 - 表名.lng * PI() / 180
                                ) / 2 
                            ),
                            2
                        )
                    )
                ) * 1000

这时需要声明一个函数接收计算出的距离,比如distance,所以现在的语句变成这样:

ROUND(
                6378.140 * 2 * ASIN(
                    SQRT(
                        POW(
                            SIN(
                                (
                                    39.904989 * PI() / 180 - 表名.lat * PI() / 180
                                ) / 2
                            ),
                            2
                        ) + COS(39.904989 * PI() / 180) * COS(表名.lat * PI() / 180) * POW(
                            SIN(
                                (
                                    116.405285 * PI() / 180 - 表名.lng * PI() / 180
                                ) / 2 
                            ),
                            2
                        )
                    )
                ) * 1000
            ) AS distance

在这里需要重点说明一下ROUND这个函数,round函数用于数据的四舍五入,它有两种形式:

1、round(x,d)  ,x指要处理的数,d是指保留几位小数

这里有个值得注意的地方是,d可以是负数,这时是指定小数点左边的d位整数位为0,同时小数位均为0;

2、round(x)  ,其实就是round(x,0),也就是默认d为0;

所以现在我们只需要在这段sql的计算结果后面加上要定义取得小数位就行,语句如下

ROUND(
                6378.140 * 2 * ASIN(
                    SQRT(
                        POW(
                            SIN(
                                (
                                    39.904989 * PI() / 180 - 表名.lat * PI() / 180
                                ) / 2
                            ),
                            2
                        ) + COS(39.904989 * PI() / 180) * COS(表名.lat * PI() / 180) * POW(
                            SIN(
                                (
                                    116.405285 * PI() / 180 - 表名.lng * PI() / 180
                                ) / 2 
                            ),
                            2
                        )
                    )
                ) * 1000,此处就是要定义的小数点位
            ) AS distance

猜你喜欢

转载自blog.csdn.net/qq_35824035/article/details/83444871
今日推荐