Obtener los días de un mes dinámicamente en MySQL – Stored Procedure

Comparto un Stored Procedure en MySQL para obtener todos los días de un mes a partir de una fecha.

Por el momento no tengo algún plugin para wordpress para compatir código y que se muestre de una manera bonita :D, así que les comparto una imagen del Stored Procedure y más abajo el código del Stored Procedure en sí.

dias_del_mes_dinamico

La lógica del procedure es sencilla, el stored espera recibir un parametro fecha de inicio del mes como entrada con formato ‘2000-02-01’. Tomando en cuenta el parametro de entrada debemos saber cual es el ultimo día de ese mes, para lo cual utilizamos la función LAST_DAY('2000-02-01') que nos retorna ‘2000-02-28’. Sabiendo cual es el día Inicial y el día Final podemos recorrer todas las fechas ese mes y guardarlas en una tabla temporar, ¿Por qué una tabla temporal? pues por que YOLO :D.

Aquí el código del Stored 😀


#-----------------------------INICIO-------------------------------------------------
CREATE DEFINER=`root`@`localhost` PROCEDURE `dias_mes_dinamico`(IN `dia_entrada` DATE)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
/*
Author: Rafael Vázquez
Date: 2015-08-01
Description: Procedure to get every day of the month
*/

#Declaration of variables
DECLARE var_inicio, var_final INT DEFAULT 0;
DECLARE fecha_Inicial,fecha_Final, fecha_incremento DATE;

#AVariable initializations
SET fecha_Inicial = dia_entrada;
SET fecha_Final= LAST_DAY(fecha_Inicial);
SET var_inicio = EXTRACT(DAY FROM fecha_Inicial);
SET var_final = EXTRACT(DAY FROM fecha_Final);
SET fecha_incremento = fecha_Inicial;

#Create a temporaty table to store every day of a month
CREATE TEMPORARY TABLE examen.tmp_dias_mes(
id INT,
dia_mes DATE
);

#Get every day of the month
WHILE var_inicio <= var_final DO
INSERT INTO examen.tmp_dias_mes (id,dia_mes) values(var_inicio, fecha_incremento);
SET fecha_incremento = DATE_ADD(fecha_incremento, INTERVAL 1 DAY);
SET var_inicio = var_inicio + 1;
END WHILE;

#Show the temporary table
SELECT * FROM examen.tmp_dias_mes;

#Drop the temporary table
DROP TABLE examen.tmp_dias_mes;
END
#—————————–FIN————————————————-

Bueno, pues todavía se puede optimizar más este Procedimiento, ya que podriamos validar que sea una fecha valida y que no explote el mundo cuando le pasemos un 30 de Febrero 😀 y cachar cualquier excepción.

Espero que sea de utilidad. Saludos.

P.D. Linux Rules!

Anuncios

Un comentario en “Obtener los días de un mes dinámicamente en MySQL – Stored Procedure

Deja una respuesta:

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

w

Conectando a %s