Je voudrais créer une routine stockée pour MySQL qui calcule le nombre de jours ouvrables ou ouvrables pour un mois (les jours ouvrables sont du lundi au vendredi).
C'est une erreur de syntaxe mais je ne sais pas ce qu'est l'erreur de syntaxe. Tout ce qu'il me dit c'est:
1064 - Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version de serveur MySQL pour la bonne syntaxe à utiliser près de 'WHILE (@daycount <@totaldays) DO IF (WEEKDAY (@checkweekday) <6) THEN' à la ligne 2
Mon erreur de syntaxe est la suivante:
WHILE(@daycount < @totaldays) DO
IF (WEEKDAY(@checkweekday) < 6) THEN
Mon code:
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;
BEGIN
WHILE(@daycount < @totaldays) DO
IF (WEEKDAY(@checkweekday) < 6) THEN
SET @workdays = @workdays+1;
END IF;
SET @daycount = @daycount+1;
SELECT ADDDATE('@checkweekday', INTERVAL 1 DAY) INTO @checkweekday;
END WHILE;
END;
SELECT @workdays;
Est-ce que quelqu'un peut aider?
UPDATE Je reçois la même erreur avec le bit de code suivant, donc cela a probablement quelque chose à voir avec ceci:
SET @workdays = 0;
IF (WEEKDAY('2013-06-13') < 6) THEN
SET @workdays = @workdays+1;
END IF;
SELECT @workdays;
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 le 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 pour qu'elle soit ce que vous voulez. Je suggère également de lire http://net.tutsplus.com/tutorials/an-introduction-to-stored-procedures/ si vous commencez 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 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 tient pas compte des jours fériés observés au niveau national (ou des jours fériés d'ailleurs).