Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment configurer une boucle WHILE avec l'instruction IF dans MySQL ?

J'ai découvert que vous ne pouvez pas avoir de conditions en dehors de la procédure stockée dans mysql. C'est pourquoi l'erreur de syntaxe. Dès que j'ai mis le code dont j'avais besoin entre

BEGIN
SELECT MONTH(CURDATE()) INTO @curmonth;
SELECT MONTHNAME(CURDATE()) INTO @curmonthname;
SELECT DAY(LAST_DAY(CURDATE())) INTO @totaldays;
SELECT FIRST_DAY(CURDATE()) INTO @checkweekday;
SELECT DAY(@checkweekday) INTO @checkday;
SET @daycount = 0;
SET @workdays = 0;

  WHILE(@daycount < @totaldays) DO
    IF (WEEKDAY(@checkweekday) < 5) THEN
      SET @workdays = @workdays+1;
    END IF;
    SET @daycount = @daycount+1;
    SELECT ADDDATE(@checkweekday, INTERVAL 1 DAY) INTO @checkweekday;
  END WHILE;
END

Juste pour les autres :

Si vous ne savez pas comment créer une routine dans phpmyadmin, vous pouvez la mettre dans la requête SQL

delimiter ;;
drop procedure if exists test2;;
create procedure test2()
begin
select ‘Hello World’;
end
;;

Exécutez la requête. Cela créera une procédure stockée ou une routine stockée nommée test2. Maintenant, allez dans l'onglet Routines et modifiez la procédure stockée comme vous le souhaitez. Je suggère également de lire http://net.tutsplus.com/ tutoriels/une-introduction-aux-procédures-stockées/ si vous débutez avec des procédures stockées.

La fonction first_day dont vous avez besoin est :Comment obtenir le premier jour de chaque mois correspondant dans mysql ?

Montrer que la procédure fonctionne Ajoutez simplement la ligne suivante sous END WHILE et au-dessus de END

SELECT @curmonth,@curmonthname,@totaldays,@daycount,@workdays,@checkweekday,@checkday;

Utilisez ensuite le code suivant dans la fenêtre de requête SQL.

call test2 /* or whatever you changed the name of the stored procedure to */

REMARQUE : Si vous l'utilisez, gardez à l'esprit que ce code ne prend pas en compte les jours fériés observés au niveau national (ni les jours fériés d'ailleurs).