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 構文にエラーがあります。14行目のnear ''を使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください >

エラーはどこにありますか..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 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-24T15:25:50.190 に答える
1

IFTHENELSEの実際の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

END IF;( )を2回閉じた場合、なぜ閉じるのかわかりません。これは、コードに問題がある可能性があります。確認してください。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$$ 

UR ステートメントに END IF をもう 1 つ含めてみてください。これでうまくいくはずです :)

于 2015-06-03T11:04:02.163 に答える