【问题标题】:mysql function create statement throwing error [closed]mysql函数创建语句抛出错误[关闭]
【发布时间】:2013-06-25 11:17:54
【问题描述】:
CREATE FUNCTION INPolygon(pnt varchar(50),poly varchar(500)) RETURNS int(1)
    DETERMINISTIC
BEGIN
DECLARE x, y, p1x, p1y, p2x, p2y float(20, 16) DEFAULT 0;
DECLARE counter,i INT DEFAULT 1;
DECLARE touches float(20,16);
DECLARE intersect int DEFAULT 0;
set counter = substrCount(poly,"#") + 1;
set x = trim(strSplit(pnt,',',1));
set y = trim(strSplit(pnt,',',2));
while i <= counter DO
set p1x = strSplit(strSplit(poly,'#',i), ',', 1);
set p1y = strSplit(strSplit(poly,'#',i), ',', 2);
set p2x = strSplit(strSplit(poly, '#', i+1), ',', 1);
set p2y = strSplit(strSplit(poly, '#', i+1), ',', 2);
IF ((x = p1x AND y = p1y) OR (x = p2x AND y = p2y)) THEN
RETURN 1;
END IF;
IF (p1y = p2y and p1y = y and x > MIN(p1x, p2x) and x < MAX(p1x, p2x))  THEN
return 1;
END IF;
IF (y > MIN(p1y, p2y) AND y <= MAX(p1y,p2y) AND x <= MAX(p1x, p2x) AND p1y != p2y) THEN
set touches = (y - p1y) * (x - p1x) / (p2y - p1y) + x;
IF touches = x THEN
return 1;
END IF;
IF p1x = p2x OR x <= touches THEN
set intersect = intersect+1;
END IF;
END IF;
END WHILE;
RETURN intersect % 2;
END

我抛出一个错误说

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 ' p2x) 和 x MIN(p1y, p2y) AND y' 在第 19 行

【问题讨论】:

  • 错误信息如何继续?缺少有趣的部分。
  • 在 ' p2x) 和 x MIN(p1y, p2y) AND y' 在第 19 行
  • 可能是因为您尝试将字符串强制转换为在集合 x 中浮动...

标签: php mysql stored-procedures


【解决方案1】:

你不能像那样使用min()max()。使用LEAST()GREATEST() 获取2 列的最小值和最大值。从

更改您使用 MIN() 的细分
MIN(p1y, p2y)

LEAST(p1y, p2x)

MAX(p1y, p2y)

GREATEST(p1y, p2y)

【讨论】:

  • +1 并接受您的回复,我从早上起就与它作斗争,谢谢
猜你喜欢
  • 2023-03-09
  • 2016-08-23
  • 2012-10-22
  • 2020-01-12
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
  • 2015-09-14
  • 1970-01-01
相关资源
最近更新 更多