首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql函数不起作用

Mysql函数不起作用
EN

Stack Overflow用户
提问于 2012-08-24 15:21:01
回答 4查看 135关注 0票数 1
代码语言:javascript
复制
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中创建函数的新手。

更新:

它指出在这些行之间带有一些圆角问号的错误:

代码语言:javascript
复制
ELSE IF n <15 THEN RETURN LEFT( s, n ) ;

ELSE IF CHAR_LENGTH( s ) <= n THEN RETURN s;

顺便说一下,我用phpmyadmin

mysql版本是: mysqlnd 5.0.10

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-24 15:29:14

我不知道我不明白为什么你关闭如果(END IF;)两次.?这可能是代码中可能出现的问题。请检查it.And ELSE IF应该没有空格,即ELSEIF。守则应是:

代码语言:javascript
复制
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;
票数 1
EN

Stack Overflow用户

发布于 2012-08-24 15:25:50

您需要删除一个额外的END IF,并将ELSE IF替换为ELSEIF

代码语言:javascript
复制
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的最后一个错误是由于一个额外的分号:

代码语言:javascript
复制
WRONG code: delimiter $$; 
GOOD code: delimiter $$
票数 3
EN

Stack Overflow用户

发布于 2012-08-24 15:28:25

IF的真正MySQL语法是

代码语言:javascript
复制
   IF THEN
   ELSEIF THEN
   ELSE
   END IF

实际上,你用的是ELSE IF,代之以ELSEIF,它会起作用的

参考资料:http://dev.mysql.com/doc/refman/5.0/en/if.html

代码语言:javascript
复制
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$$
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12112238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档