我需要一个 MySQL 表来保存 2011-01-01 和 2011-12-31 之间的所有日期。我创建了一个表,其中一个列名为“_date”,类型为 DATE。
通过什么查询,我可以在表中填充所有所需的日期(而不必手动输入它们)?
尝试这个:
DROP PROCEDURE IF EXISTS filldates;
DELIMITER |
CREATE PROCEDURE filldates(dateStart DATE, dateEnd DATE)
BEGIN
WHILE dateStart <= dateEnd DO
INSERT INTO tablename (_date) VALUES (dateStart);
SET dateStart = date_add(dateStart, INTERVAL 1 DAY);
END WHILE;
END;
|
DELIMITER ;
CALL filldates('2011-01-01','2011-12-31');
这是可以使用它的 SQL Fiddle:http://sqlfiddle.com/#!2/65d13/1
编辑(检查日期是否已经存在)按照要求安德鲁·福克斯.
CREATE PROCEDURE filldates(dateStart DATE, dateEnd DATE)
BEGIN
DECLARE adate date;
WHILE dateStart <= dateEnd DO
SET adate = (SELECT mydate FROM MyDates WHERE mydate = dateStart);
IF adate IS NULL THEN BEGIN
INSERT INTO MyDates (mydate) VALUES (dateStart);
END; END IF;
SET dateStart = date_add(dateStart, INTERVAL 1 DAY);
END WHILE;
END;//
这是可以使用它的 SQL Fiddle:http://sqlfiddle.com/#!2/66f86/1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)