【发布时间】:2012-09-19 00:01:23
【问题描述】:
我正在尝试创建一个 MySQL 函数来计算 levenshtein 距离。我找到了一个看起来非常接近我需要的函数,但是它总是到处抛出错误——我是 MySQL 函数的新手,所以我不知道出了什么问题?
函数如下:
DELIMITER $$
CREATE FUNCTION LEVENSHTEIN( s1 CHAR(255), s2 CHAR(255))
RETURNS int(3)
DETERMINISTIC
BEGIN
DECLARE s1_len, s2_len, i, j, c, c_temp, cost INT;
DECLARE s1_char CHAR(255);
DECLARE cv0, cv1 CHAR(255);
SET s1_len = LENGTH(s1);
SET s2_len = LENGTH(s2);
SET cv1 = 0x00;
SET j = 1;
SET i = 1;
SET c = 0;
IF s1 = s2 THEN
RETURN 0;
ELSE IF s1_len = 0 THEN
RETURN s2_len;
ELSE IF s2_len = 0 THEN
RETURN s1_len;
ELSE
WHILE j <= s2_len DO
SET c = c + 1;
IF s1_char = SUBSTRING(s2, j, 1) THEN
SET cost = 0; ELSE SET cost = 1;
END IF;
SET c_temp = CONV(HEX(SUBSTRING(cv1, j, 1)), 16, 10) + cost;
SET c_temp = CONV(HEX(SUBSTRING(cv1, j+1, 1)), 16, 10) + 1;
IF c > c_temp THEN
SET c = c_temp;
END IF;
SET cv0 = CONCAT(cv0, UNHEX(HEX(c))), j = j + 1;
END WHILE;
SET cv1 = cv0, i = i + 1;
END WHILE;
END IF;
RETURN c;
END$$
DELIMITER ;
这是错误(到目前为止)。
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHILE; END IF; RETURN c; END' at line 36
编辑:原始代码可以在here找到
【问题讨论】:
-
我将原始代码粘贴到 TOAD for MySQL 中,它运行完美。似乎不需要编辑。
-
我只是做了同样的事情——在我试图让它工作的某个地方,我真的把代码搞砸了。添加分隔符后,代码运行良好。
-
我正在尝试执行您的代码,但出现以下错误 1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'WHILE; 附近使用的正确语法;万一;返回 c; END' 在第 36 行 为什么???