sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo configurar un bucle WHILE con declaración IF en MySQL?

Descubrí que no puede tener condicionales fuera del procedimiento almacenado en mysql. Por eso el error de sintaxis. Tan pronto como puse el código que necesitaba 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

Solo para los demás :

Si no está seguro de cómo crear una rutina en phpmyadmin, puede poner esto en la consulta SQL

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

Ejecute la consulta. Esto creará un procedimiento almacenado o una rutina almacenada llamada test2. Ahora vaya a la pestaña de rutinas y edite el procedimiento almacenado para que sea lo que desea. También sugiero leer http://net.tutsplus.com/ tutoriales/una-introducción-a-los-procedimientos-almacenados/ si está comenzando con los procedimientos almacenados.

La función first_day que necesita es:-mysql">¿Cómo obtener el primer día de cada mes correspondiente en mysql?

Mostrando que el Procedimiento está funcionando Simplemente agregue la siguiente línea debajo de END WHILE y arriba de END

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

Luego use el siguiente código en la ventana de consulta SQL.

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

NOTA: Si usa esto, tenga en cuenta que este código no tiene en cuenta los días festivos observados a nivel nacional (o cualquier día festivo).