DROP PROCEDURE IF EXISTS fill_cal_format; DELIMITER | CREATE PROCEDURE fill_cal_format(dateStart DATE, dateEnd DATE) SQL SECURITY INVOKER BEGIN declare i date ; declare w int; set i = dateStart ; WHILE i <= dateEnd DO set w = week(i); IF weekday(i) = 0 THEN INSERT INTO dbr_cal_format(date_type, date_index) VALUES ('week', concat( DATE_FORMAT(dateStart, '%y.%m'), '-', if(length(w) = 1, concat('0',w), w) )); END IF; IF DATE_FORMAT(i, '%d') = '01' THEN INSERT INTO dbr_cal_format(date_type, date_index) VALUES ('month', DATE_FORMAT(i, '%y.%m')); END IF; INSERT INTO dbr_cal_format(date_type, date_index) VALUES ('day', DATE_FORMAT(i, '%Y%m%d')); SET i = date_add(i, INTERVAL 1 DAY); END WHILE; END; | DELIMITER ; CALL fill_cal_format('2021-01-01','2021-12-31');