我正在尝试为MySQL编写一个函数,它将从提交的电话号码中删除所有非数字字符。我一直收到语法错误。
DELIMITER $$
CREATE FUNCTION cleanPhone(phone VARCHAR(20)) RETURNS VARCHAR(20)
DETERMINISTIC
BEGIN
DECLARE clean VARCHAR(20) DEFAULT '';
DECLARE idx TINYINT DEFAULT 1;
DECLARE ch CHAR(1);
DECLARE digits CHAR(10) DEFAULT '0123456789';
WHILE idx <= LENGTH(phone) DO
SET ch = MID(phone,idx,1);
IF LOCATE(ch, digits) > 0 THEN SET clean = CONCAT(clean, ch);
SET idx = idx + 1;
END WHILE;
RETURN clean;
END;
$$
DELIMITER ;
当我尝试执行此代码时,出现以下错误:
错误1064(42000):您的SQL语法有错误;检查 手册,对应右边的MySQL服务器版本 要在&#39;
附近使用的语法WHILE; RETURN clean; END
&#39;在第13行
答案 0 :(得分:1)
您错过了END IF;
WHILE idx <= LENGTH(phone) DO
SET ch = MID(phone,idx,1);
IF LOCATE(ch, digits) > 0 THEN SET clean = CONCAT(clean, ch);
END IF;
SET idx = idx + 1;
END WHILE;
答案 1 :(得分:0)
你忘了关闭if。
DELIMITER $$
CREATE FUNCTION cleanPhone(phone VARCHAR(20)) RETURNS VARCHAR(20)
DETERMINISTIC
BEGIN
DECLARE clean VARCHAR(20) DEFAULT '';
DECLARE idx TINYINT DEFAULT 1;
DECLARE ch CHAR(1);
DECLARE digits CHAR(10) DEFAULT '0123456789';
WHILE idx <= LENGTH(phone) DO
SET ch = MID(phone,idx,1);
IF LOCATE(ch, digits) > 0 THEN SET clean = CONCAT(clean, ch);
SET idx = idx + 1;
END IF;
END WHILE;
RETURN clean;
END $$
DELIMITER ;