MySQL函数如果elseif 1064

MySQL函数如果elseif 1064,mysql,function,if-statement,Mysql,Function,If Statement,我正在尝试使用MySQL,但两天以来我一直在使用它。 我有一个1064错误,这意味着语法错误。我做了很多尝试,但都没有成功 DELIMITER $$ CREATE FUNCTION set_libelle(civilite VARCHAR(4), prenom VARCHAR(30), nom VARCHAR(30)) RETURNS VARCHAR(20) BEGIN IF (LEN(civilite)+LEN(prenom)+LEN(nom)<19) THE

我正在尝试使用MySQL,但两天以来我一直在使用它。 我有一个1064错误,这意味着语法错误。我做了很多尝试,但都没有成功

DELIMITER $$
CREATE FUNCTION set_libelle(civilite VARCHAR(4), prenom VARCHAR(30), nom VARCHAR(30)) 
RETURNS VARCHAR(20) 
    BEGIN
        IF (LEN(civilite)+LEN(prenom)+LEN(nom)<19) THEN
            RETURN civilite + ' ' + prenom + ' ' + nom;
        ELSEIF (LEN(civilite)+LEN(nom)<17) THEN 
            RETURN civilite + ' ' + LEFT(prenom,1) + '. ' + nom;
        ELSE 
            RETURN civilite + ' ' + LEFT(prenom,1) + '. ' + LEFT(nom, (17-(LEN(civilite)));
        END IF;
    END$$
DELIMITER ; 
分隔符$$
创建函数集(civilite VARCHAR(4)、prenom VARCHAR(30)、nom VARCHAR(30))
返回VARCHAR(20)
开始

如果(LEN(civilite)+LEN(prenom)+LEN(nom)您正在使用
+
进行字符串连接,而不是
concat()

正确的语法是:

DELIMITER //

CREATE FUNCTION set_libelle(civilite VARCHAR(4), prenom VARCHAR(30), nom VARCHAR(30)) 
RETURNS VARCHAR(20) 
    BEGIN
        IF (LEN(civilite) + LEN(prenom) + LEN(nom) < 19) THEN
            RETURN CONCAT_WS(' ', civilite,  prenom, ',', nom);
        ELSEIF (LEN(civilite) + LEN(nom) < 17) THEN 
            RETURN CONCAT_WS(' ', civilite, LEFT(prenom, 1), '.', nom);
        ELSE 
            RETURN CONCAT_WS(' ', civilite, LEFT(prenom, 1), '.', LEFT(nom, 17 - LEN(civilite)) );
        END IF;
    END; //
DELIMITER ; 
分隔符//
创建函数集(civilite VARCHAR(4)、prenom VARCHAR(30)、nom VARCHAR(30))
返回VARCHAR(20)
开始
如果(LEN(文明)+LEN(prenom)+LEN(nom)<19),那么
返回CONCAT_WS(“”,civilite,prenom,“”,nom);
ELSEIF(LEN(civilite)+LEN(nom)<17)那么
返回CONCAT_WS('',civilite,左(prenom,1),'',nom);
其他的
返回CONCAT_WS(“”,civilite,左(prenom,1),“”),左(nom,17-LEN(civilite));
如果结束;
结束//
定界符;

这可能会有所帮助,但并没有解决问题:我仍然有错误:“1064(42000)[…]在第行使用near';END IF;END'的语法正确9@Thibaud.P…我现在觉得编辑是对的,但在SQL Fiddle中不起作用。仍然不好。我使用的是MySQL。在您的编辑中,我应该删除顶部的分隔符?@Thibaud.P…SQL Fiddle对分隔符和代码的处理不同。您应该有分隔符语句。