DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `util`.`time_generate`(vStarted DATE, vEnded DATE) BEGIN /** * Generate a temporary table between the days passed as parameters * * @param vStarted Start date * @param vEnded End date * @table tmp.time (dated, dayed, weeked, monthed, yeared) */ DECLARE vCurrentDate DATE; CREATE OR REPLACE TEMPORARY TABLE tmp.time( dated DATE PRIMARY KEY, `day` INT, `week` INT, `month` INT, `year` INT ) ENGINE = MEMORY; IF(vStarted > vEnded) THEN CALL throw('The started cannot be later than the ended'); END IF; SET vCurrentDate = vStarted; WHILE vCurrentDate <= vEnded DO INSERT INTO tmp.time SET dated = vCurrentDate, `day` = DAY(vCurrentDate), `week` = WEEK(vCurrentDate), `month` = MONTH(vCurrentDate), `year` = YEAR(vCurrentDate); SET vCurrentDate = vCurrentDate + INTERVAL 1 DAY; END WHILE; END$$ DELIMITER ;