Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
嵌套if else语句[mysql]上的SQL语法错误_Mysql_Sql_Function - Fatal编程技术网

嵌套if else语句[mysql]上的SQL语法错误

嵌套if else语句[mysql]上的SQL语法错误,mysql,sql,function,Mysql,Sql,Function,我有一个下面的sql函数,我试图使用嵌套的if-else语句 删除嵌套的“if”语句后,函数工作正常。但添加后,将显示错误 BEGIN DECLARE daysEntitled DECIMAL(4,2); DECLARE joinDate DATE; DECLARE dayOfMonth INT(4); SET joinDate = (SELECT join_date FROM users WHERE id = user); SET daysEntitled = TIMEST

我有一个下面的sql函数,我试图使用嵌套的if-else语句

删除嵌套的“if”语句后,函数工作正常。但添加后,将显示错误

BEGIN
  DECLARE daysEntitled DECIMAL(4,2);
  DECLARE joinDate DATE;
  DECLARE dayOfMonth INT(4);
  SET joinDate = (SELECT join_date FROM users WHERE id = user);
  SET daysEntitled = TIMESTAMPDIFF(MONTH, joinDate, currentDate);
  IF YEAR(joinDate) = YEAR(currentDate) THEN
    SET currentDate = DATE_FORMAT(currentDate,'%Y-12-31');
    SET daysEntitled = TIMESTAMPDIFF(MONTH, joinDate, currentDate);
    SET dayOfMonth = CAST(DAY(joinDate) AS UNSIGNED);   

****** On adding this block ********

    IF dayOfMonth <= 15 THEN
       SET daysEntitled += 1.00;
    ENDIF;

****** On adding this block ********

  ELSEIF YEAR(joinDate) < YEAR(currentDate) THEN    
    SET daysEntitled = 8.00;    
  ELSEIF YEAR(joinDate) > YEAR(currentDate) THEN
    SET daysEntitled = 12.00;   
  ELSE
    SET daysEntitled = 4.00;  
  END IF;
  RETURN daysEntitled;
END
代码似乎很好。我不知道出了什么问题。
非常感谢您的帮助。谢谢。

在MySQL中使用嵌套的IF语句没有什么错。我认为问题在于您试图增加变量的方式:

SET daysEntitled += 1.00;
                 ^^ not allowed
请改用此代码:

IF dayOfMonth <= 15 THEN
   SET daysEntitled = daysEntitled + 1.00;
ENDIF;

MySQL说:1064-您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,了解正确的版本