【发布时间】:2017-12-19 18:03:55
【问题描述】:
我正在尝试使用我发现的 mysql 函数,但我似乎遇到了一些错误。这是函数:
SET GLOBAL log_bin_trust_function_creators=1;
DROP FUNCTION IF EXISTS digits;
DELIMITER $$
CREATE FUNCTION digits( str CHAR(32) ) RETURNS CHAR(32)
BEGIN
DECLARE i, len SMALLINT DEFAULT 1;
DECLARE ret CHAR(32) DEFAULT '';
DECLARE c CHAR(1);
SET len = CHAR_LENGTH( str );
REPEAT
BEGIN
SET c = MID( str, i, 1 );
IF c BETWEEN '0' AND '9' THEN
SET ret=CONCAT(ret,c);
END IF;
SET i = i + 1;
END ;
UNTIL i > len END REPEAT;
RETURN ret;
END
$$
DELIMITER ;
SELECT digits('123ab45cde6789fg');
我正在使用 Mariadb 5.5
Server version: 5.5.50-MariaDB MariaDB Server
这是我看到的错误:
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '$$
DELIMITER ;
我尝试了一些建议,例如更改最初是管道的分隔符。将分隔符从END 旁边移动到我已经完成的下面,但是,错误似乎发生在两者中。
我已经尝试了基本的修改来修复错误,但它仍然出现,虽然删除这部分时我不再收到任何错误,但结果不正确。
REPEAT
BEGIN
SET c = MID( str, i, 1 );
IF c BETWEEN '0' AND '9' THEN
SET ret=CONCAT(ret,c);
END IF;
SET i = i + 1;
END ;
UNTIL i > len END REPEAT;
任何指针都会很棒。
更新
我测试了其他几个版本,也遇到了同样的问题。我目前正在使用 Navicat。
Server version: 5.5.50-MariaDB MariaDB Server
Server version: 5.5.31-0ubuntu0.12.10.1 (Ubuntu)
Server version: 5.1.73 Source distribution
Server version: 5.5.52-MariaDB MariaDB Server
【问题讨论】:
-
无法重现(MySQL 5.6)。
-
无法在
Server version: 10.1.21-MariaDB MariaDB Server复制 -
MariaDB 5.x 真的很老了,不是吗?
-
你能把 Navicat 排除在外,直接在命令行界面中尝试吗?
-
@UsagiMiyamoto - 5.0 大约在 8 年前开始,但他的版本只有 1 岁。尽管如此,还是建议升级到 10.1。
标签: mysql mariadb mysql-routines