0

私はMySQLをほとんど学んでいません(SQLiteから移行しています)。MySQL コマンド ライン クライアント内でカスタム関数を作成しようとしていますが、修正できないエラーが発生し、オンラインで回答を見つけることができません。私の最初の機能は次のように始まりました。

    CREATE FUNCTION myDatabase.LCASE_ASCII_VALUE_AT(
        unparsedLine VARCHAR(1024),
        linePos int
    ) RETURNS int DETERMINISTIC
    return ASCII( LCASE( RIGHT( CHAR_LENGTH(unparsedLine) - linePos + 1) ) );

このエラーが発生しました:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') )' at line 10

私の構文が間違っていた場所へのポインタはありますか? 私はこれらを疑っていましたが、問題を解決しませんでした:

  1. おそらく、MySQL は のような複合ステートメントを好まないでしょうreturn ASCII( LCASE( ...。しかし、ステートメントを手動で解明した後でも、同じエラーが発生しました (ただし、新たに解明されたステートメントの行では、スペースを節約するために解明されたステートメントを除外しています)。
  2. おそらくDELIMITER $$ [function definition] END $$ DELIMITER ;ビジネスは必須ですが、それでもエラーは修正されませんでした。MySQL のドキュメントには、DELIMITER が不要な 1 行の関数の例が示されています。( https://dev.mysql.com/doc/refman/5.0/en/create-procedure.htmlの 'hello' 関数)

編集: MySQL コマンド ライン クライアント内でこの関数を作成していることを追加しました。

4

1 に答える 1

1

right文字列自体と文字数の2 つの引数が必要です。文字数を指定しただけです。

代わりにこれを試してください:

return ASCII( LCASE( RIGHT( unparsedLine, CHAR_LENGTH(unparsedLine) - linePos + 1) ) );

また、その場合は次のようなsubstr引数を計算する必要がないため、より良いオプションであることがわかる場合があります。right

return ASCII( LCASE( SUBSTR( unparsedLine, linePos, 1 ) ) );
于 2012-10-28T05:25:02.220 に答える