Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie richte ich eine WHILE-Schleife mit IF-Anweisung in MySQL ein?

Ich habe festgestellt, dass Sie außerhalb der gespeicherten Prozedur in mysql keine Bedingungen haben können. Deshalb der Syntaxfehler. Sobald ich den Code, den ich brauchte, zwischen

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

Nur für andere :

Wenn Sie sich nicht sicher sind, wie Sie eine Routine in phpmyadmin erstellen, können Sie diese in die SQL-Abfrage einfügen

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

Führen Sie die Abfrage aus. Dadurch wird eine gespeicherte Prozedur oder gespeicherte Routine mit dem Namen test2 erstellt. Gehen Sie nun zur Registerkarte Routinen und bearbeiten Sie die gespeicherte Prozedur so, wie Sie es möchten. Ich empfehle auch, http://net.tutsplus.com/ zu lesen. Tutorials/eine-Einführung-in-gespeicherte-Prozeduren/ wenn Sie mit gespeicherten Prozeduren beginnen.

Die first_day-Funktion, die Sie brauchen, ist:Wie erhalte ich den ersten Tag jedes entsprechenden Monats in mysql?

Das Anzeigen des Verfahrens funktioniert Fügen Sie einfach die folgende Zeile unter END WHILE und über END hinzu

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

Verwenden Sie dann den folgenden Code im SQL-Abfragefenster.

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

HINWEIS: Wenn Sie dies verwenden, denken Sie bitte daran, dass dieser Code keine national anerkannten Feiertage (oder Feiertage in dieser Hinsicht) berücksichtigt.