1
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 行的 '' 附近使用 >

错误在哪里..因为我是在 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

4

4 回答 4

3

END IF您需要删除一个额外的内容,并替换ELSE IFELSEIF

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 $$
于 2012-08-24T15:25:50.190 回答
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$$
于 2012-08-24T15:28:25.270 回答
1

我不确定 bt 我不明白为什么你关闭 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;
于 2012-08-24T15:29:14.443 回答
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$$ 

尝试在您的语句中再包含一个 END IF,这应该可以工作:)

于 2015-06-03T11:04:02.163 回答