簡體   English   中英

MySQL功能不起作用

[英]Mysql function doesnt work

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

您需要刪除一個額外的END IF ,然后用ELSEIF替換ELSE IF

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 $$

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$$

我不確定bt,我不明白為什么您要兩次( END IF; )關閉。 這可能是您的代碼中可能的問題。 請檢查它。ELSE 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;
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,這應該可以:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM