DROP FUNCTION IF EXISTS shorten;
delimiter $$
CREATE FUNCTION shorten(s VARCHAR(255), n INT)
RETURNS VARCHAR(255)
BEGIN
IF ISNULL(s) THEN
RETURN '';
ELSE IF n<15 THEN
RETURN LEFT(s, n);
ELSE IF CHAR_LENGTH(s) <= n THEN
RETURN s;
ELSE
RETURN CONCAT(LEFT(s, n-10), ' ... ', RIGHT(s, 5));
END IF;
END$$我得到的信息是:
#1064 -您的SQL语法有错误;请检查与您的MySQL服务器版本相对应的手册,以获得在第14行附近使用的正确语法!
error..cause在哪里?我是在mysql中创建函数的新手。
更新:
它指出在这些行之间带有一些圆角问号的错误:
ELSE IF n <15 THEN RETURN LEFT( s, n ) ;
ELSE IF CHAR_LENGTH( s ) <= n THEN RETURN s;顺便说一下,我用phpmyadmin
mysql版本是: mysqlnd 5.0.10
发布于 2012-08-24 15:29:14
我不知道我不明白为什么你关闭如果(END IF;)两次.?这可能是代码中可能出现的问题。请检查it.And ELSE IF应该没有空格,即ELSEIF。守则应是:
DROP FUNCTION IF EXISTS shorten;
delimiter $$
CREATE FUNCTION shorten(s VARCHAR(255), n INT)
RETURNS VARCHAR(255)
BEGIN
IF ISNULL(s) THEN
RETURN '';
ELSEIF n<15 THEN
RETURN LEFT(s, n);
ELSEIF CHAR_LENGTH(s) <= n THEN
RETURN s;
ELSE
RETURN CONCAT(LEFT(s, n-10), ' ... ', RIGHT(s, 5));
END IF;
END;$$
delimiter;发布于 2012-08-24 15:25:50
您需要删除一个额外的END IF,并将ELSE IF替换为ELSEIF
DROP FUNCTION IF EXISTS shorten;
delimiter $$
CREATE FUNCTION shorten(s VARCHAR(255), n INT) RETURNS VARCHAR(255)
BEGIN
IF ISNULL(s) THEN
RETURN '';
ELSEIF n<15 THEN
RETURN LEFT(s, n);
ELSEIF CHAR_LENGTH(s) <= n THEN
RETURN s;
ELSE
RETURN CONCAT(LEFT(s, n-10), ' ... ', RIGHT(s, 5));
END IF;
END$$Dmitry的最后一个错误是由于一个额外的分号:
WRONG code: delimiter $$;
GOOD code: delimiter $$发布于 2012-08-24 15:28:25
IF的真正MySQL语法是
IF THEN
ELSEIF THEN
ELSE
END IF实际上,你用的是ELSE IF,代之以ELSEIF,它会起作用的
参考资料:http://dev.mysql.com/doc/refman/5.0/en/if.html
DROP FUNCTION IF EXISTS shorten;
delimiter $$
CREATE FUNCTION shorten(s VARCHAR(255), n INT)
RETURNS VARCHAR(255)
BEGIN
IF ISNULL(s) THEN
RETURN '';
ELSEIF n<15 THEN
RETURN LEFT(s, n);
ELSEIF CHAR_LENGTH(s) <= n THEN
RETURN s;
ELSE
RETURN CONCAT(LEFT(s, n-10), ' ... ', RIGHT(s, 5));
END IF;
END$$https://stackoverflow.com/questions/12112238
复制相似问题