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行''附近使用的语法 &GT;
错误在哪里。因为我是在mysql中创建函数的新手。
更新:
它指出这些行之间有一些圆角问号的错误:
ELSE IF n <15 THEN RETURN LEFT( s, n ) ;
ELSE IF CHAR_LENGTH( s ) <= n THEN RETURN s;
BTW,我使用phpmyadmin
mysql版本是:mysqlnd 5.0.10
答案 0 :(得分:3)
您需要删除额外的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$$
德米特里的最后一个错误是因为一个额外的分号:
WRONG code: delimiter $$;
GOOD code: delimiter $$
答案 1 :(得分:1)
IF THEN ELSE的真正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$$
答案 2 :(得分:1)
我不确定我不明白为什么你关闭if(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;$$
delimiter;
答案 3 :(得分:1)
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);
ELSE
IF CHAR_LENGTH(s) <= n THEN
RETURN s;
ELSE
RETURN CONCAT(LEFT(s, n-10), '... ',RIGHT(s,5));
END IF;
END IF;
END$$
尝试在ur语句中再包含一个END IF,这应该有效:)