DELIMITER $$
CREATE FUNCTION `getDistance`(`lat1` float,`lng1` float,`lat2` float,`lng2` float) RETURNS int(11)
BEGIN
DECLARE result double;
set lng1 = lng1 * pi() / 180.0;
set lat1 = lat1 * pi() / 180.0;
set lng2 = lng2 * pi() / 180.0;
set lat2 = lat2 * pi() / 180.0;
set result = 2 * asin(sqrt(pow(sin((lat1 - lat2) / 2), 2) + cos(lat1) * cos(lat2) * pow(sin((lng1 - lng2) / 2), 2)));
set result = result * 6378.137;
set result = round(result * 10000) / 10000;
RETURN result;
END $$
DELIMITER;
代码解释
这个函数是取球面内两点间的距离,用于查找附近的最近人
1,DELIMITER $$ 定义结束符。MySQL默认的结束符是分号,但是函数体中可能用到分号。为了避免冲突,需要另外定义结束符。
2,CREATE FUNCTION 创建函数genPerson,函数的参数是getDistance,返回值是int(11)。
3,函数体放在BEGIN 与 END之间。
4,DECLARE 声明变量,str类型是varchar(50),默认值是空
5,RETURN 返回拼接后的字符串str。
6,要是报错:log_bin_trust_function_creators 相关的,要先执行 set global log_bin_trust_function_creators=TRUE;