salix/db/routines/util/procedures/time_generate.sql

39 lines
927 B
SQL

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 ;