MySQL Tips and Tricks
Stored Routine: Generate a list of dates
Usage: CALL dates('2011-09-06', NOW());
CREATE PROCEDURE `dates`(IN `start` DATETIME, IN `end` DATETIME)
MODIFIES SQL DATA
DETERMINISTIC
COMMENT 'Builds a result set of dates, inclusive'
BEGIN
DECLARE d DATE;
DECLARE e DATE;
SET d = DATE(start);
SET e = DATE(end);
DROP TEMPORARY TABLE IF EXISTS `dates`;
CREATE TEMPORARY TABLE IF NOT EXISTS `dates` (`date` DATE NOT NULL);
l: LOOP
INSERT INTO dates VALUES(d);
SET d = d + INTERVAL 1 DAY;
IF d > e THEN
LEAVE l;
END IF;
END LOOP l;
END