Home » Mysql » Create mysql date range

Create mysql date range

Posted by: admin April 4, 2018 Leave a comment

Questions:

Can’t seem to find the answer I am looking for.

I want to create a range of dates from 2010-11-01 to 2015-01-01 in a table.

2010-11-01
2010-11-02
2010-11-03
etc…

Column datatype is ‘Date’

Thanks

Answers:
DROP PROCEDURE IF EXISTS datespopulate;
DELIMITER |
CREATE PROCEDURE datespopulate(dateStart DATE, dateEnd DATE)
BEGIN
  WHILE dateStart <= dateEnd DO
    INSERT INTO datetable (d) VALUES (dateStart);
    SET dateStart = date_add(dateStart, INTERVAL 1 DAY);
  END WHILE;
END;
|
DELIMITER ;
CALL datespopulate('2010-11-01','2015-01-01');

Note I named my table “datetable” and the column is named “d“, but feel free to change this. Works fine on my end, let me know if you run in to an issue.

Kudos to Joe for getting the ball rolling. 😉

Questions:
Answers:

You could certainly take the brute force approach.

set @d = cast('2010-11-01' as date);

while (@d < '2015-01-02') do
    insert into YourTable 
        (YourColumn)
        values
        (@d);

    set @d = date_add(@d, interval 1 day);
end while;

Questions:
Answers:

Realize that this is an old thread- However, I found it useful and would like to suggest adding SET AUTOCOMMIT=0 to Brad’s procedure. This will seriously increase the performance (On my system; from 2 hours to 4 seconds). More information is found here:

http://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-transaction-management.html