sql >> Database >  >> RDS >> Mysql

Hoe stel je een WHILE-lus in met IF-statement in MySQL?

Ik heb ontdekt dat je geen conditionals kunt hebben buiten de opgeslagen procedure in mysql. Dit is de reden waarom de syntaxisfout. Zodra ik de code die ik nodig had tussen

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

Alleen voor anderen :

Als u niet zeker weet hoe u een routine in phpmyadmin moet maken, kunt u deze in de SQL-query plaatsen

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

Voer de query uit. Hierdoor wordt een opgeslagen procedure of opgeslagen routine met de naam test2 gemaakt. Ga nu naar het tabblad routines en bewerk de opgeslagen procedure om te zijn wat je wilt. Ik raad ook aan om http://net.tutsplus.com/ te lezen tutorials/an-introduction-to-stored-procedures/ als u begint met opgeslagen procedures.

De first_day-functie die je nodig hebt is:Hoe krijg ik de eerste dag van elke corresponderende maand in mysql?

Toon dat de procedure werkt Voeg eenvoudig de volgende regel toe onder END WHILE en boven END

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

Gebruik dan de volgende code in het SQL-queryvenster.

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

OPMERKING: Als u dit gebruikt, houd er dan rekening mee dat deze code geen rekening houdt met nationale feestdagen (of welke feestdagen dan ook).




  1. Waarom retourneert PDO::lastInsertId 0?

  2. Oracle select retourneert niet alle kolommen onder sqlplus

  3. MYSQL- en python-fout

  4. Onbekende codering tijdens het gebruik van df.to_sql() om naar MySQL te schrijven met pyodbc