作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将以下“havesin”算法实现为 SQL 函数。
DELIMITER //
CREATE FUNCTION `db`.`haversin` (slat FLOAT, slon FLOAT, dlat FLOAT, dlon FLOAT)
RETURNS FLOAT
BEGIN
declare alphaLon,a FLOAT;
set alphaLon=(slon–dlon);
set a=3956*2*ASIN(SQRT( POWER(SIN((slat - abs(dlat)) * pi()/180 / 2),2) + COS(slat * pi()/180 ) * COS(abs(dlat) * pi()/180) * POWER(SIN((alphaLon) * pi()/180 / 2), 2) ));
return a;
END
//delimiter;
执行上述命令时,我收到 1064 错误“//分隔符附近的语法错误”,但是,该函数确实被创建了。
最令人困惑的是,运行该函数时,结果是:
mysql> SELECT haversin(2.0,45.0,2.0,1.2);
ERROR 1054 (42S22): Unknown column 'slon–dlon' in 'field list'
这怎么可能?
最佳答案
您粘贴的代码包含对 MySQL 客户端的三个指令:
将其语句分隔符更改为 //
;
向服务器发送一个CREATE FUNCTION
命令;和
未知指令分隔符;
。
因此前两个命令成功,第三个命令失败。要纠正第三个命令的失败,请在 delimiter
关键字和所需的新分隔符之间插入空格。
存储的程序在执行之前不会被评估:因此,在调用函数之前不会检测到运行时错误(例如“未知列”)。事实上,考虑到数据库模式在定义函数后可能会发生变化,这是完全有道理的。
您收到此错误是因为您的减号字符实际上是 EN DASH (U+2013)。对于算术减法,替换为 HYPHEN-MINUS (U+002D)。
关于Mysql "Unknown column ' slon–dlon' 在 'field list',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17148253/
我将以下“havesin”算法实现为 SQL 函数。 DELIMITER // CREATE FUNCTION `db`.`haversin` (slat FLOAT, slon FLOAT, dla
我是一名优秀的程序员,十分优秀!