使用WHILE的MySQL函数中的语法错误

时间:2016-03-11 04:52:35

标签: mysql

我正在尝试为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行

2 个答案:

答案 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 ;