Mysql
 sql >> Database >  >> RDS >> Mysql

Come impostare un ciclo WHILE con l'istruzione IF in MySQL?

Ho scoperto che non puoi avere condizionali al di fuori della stored procedure in mysql. Questo è il motivo per cui l'errore di sintassi. Non appena ho inserito il codice che mi serviva in mezzo

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

Solo per gli altri :

Se non sei sicuro di come creare una routine in phpmyadmin puoi inserirlo nella query SQL

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

Esegui la query. Questo creerà una procedura memorizzata o una routine memorizzata denominata test2. Ora vai alla scheda delle routine e modifica la procedura memorizzata in modo che sia ciò che desideri. Suggerisco anche di leggere http://net.tutsplus.com/ tutorial/un-introduzione-alle-procedure-memorizzate/ se stai iniziando con le stored procedure.

La funzione primo_giorno di cui hai bisogno è:Come ottenere il primo giorno di ogni mese corrispondente in mysql?

Mostrare la procedura funziona Aggiungi semplicemente la riga seguente sotto END WHILE e sopra END

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

Quindi utilizzare il codice seguente nella finestra delle query SQL.

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

NOTA: Se lo utilizzi, tieni presente che questo codice non tiene conto delle festività osservate a livello nazionale (o di qualsiasi festività per quella materia).