我几乎没有学习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
我的语法出错的地方有什么指针吗?我怀疑这些,但他们没有解决问题:
return ASCII( LCASE( ...
这样的复合语句。但即使在手动解开语句之后,我仍然得到了相同的错误(但是在新发布的语句中的一行 - 我省略了解开的声明以节省空间)。DELIMITER $$ [function definition] END $$ DELIMITER ;
业务是强制性的 - 但这并没有解决错误,MySQL文档给出了一个不需要DELIMITER的单行函数的例子。 (https://dev.mysql.com/doc/refman/5.0/en/create-procedure.html)的“你好”功能编辑:补充说我在MySQL命令行客户端中创建了这个函数。
答案 0 :(得分:1)
right
需要两个参数,字符串本身和字符数。你只给了字符数。
请改为尝试:
return ASCII( LCASE( RIGHT( unparsedLine, CHAR_LENGTH(unparsedLine) - linePos + 1) ) );
此外,您可能会发现substr
是更好的选择,因为在这种情况下无需计算right
的参数,例如:
return ASCII( LCASE( SUBSTR( unparsedLine, linePos, 1 ) ) );