繁体   English   中英

MySQL函数,如果elseif 1064

[英]MySQL function if elseif 1064

我正在尝试使用MySQL,但是自2天以来,我一直坚持使用它。 我有一个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 ; 

您知道为什么这行不通吗? 谢谢

您将+用于字符串连接,而不是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 ; 

是一个SQL Fiddle。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM