sql >> Databasteknik >  >> RDS >> Mysql

Hur ställer man in en WHILE-loop med IF-sats i MySQL?

Jag har upptäckt att du inte kan ha villkor utanför den lagrade proceduren i mysql. Det är därför syntaxfelet. Så snart jag lagt koden som jag behövde mellan

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

Bara för andra :

Om du inte är säker på hur du skapar en rutin i phpmyadmin kan du lägga detta i SQL-frågan

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

Kör frågan. Detta kommer att skapa en lagrad procedur eller lagrad rutin med namnet test2. Gå nu till fliken rutiner och redigera den lagrade proceduren så att den blir vad du vill ha. Jag föreslår också att du läser http://net.tutsplus.com/ självstudier/en-introduktion-till-lagrade-procedurer/ om du börjar med lagrade procedurer.

Den första_dagsfunktionen du behöver är:Hur får man första dagen i varje motsvarande månad i mysql?

Visning av proceduren fungerar Lägg bara till följande rad under END WHILE och ovanför END

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

Använd sedan följande kod i SQL Query Window.

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

OBS: Om du använder detta, kom ihåg att denna kod inte tar hänsyn till nationellt observerade helgdagar (eller helgdagar för den delen).




  1. COALESCE två datum returnerar binärt?

  2. T-SQL:problem med strängkonkat

  3. SQL Server där klausul mellan två datum inte ger förväntad utdata

  4. Hämta koordinaterna för MySQL-punkttypen