Php MySql如何从一个时间间隔生成一个完整的日历?
我是mysql程序的新手。我请求您帮助生成一个带有某种程序的日历(每隔一天生成一行)。。。在stackoverflow上,我找到了以下函数:Php MySql如何从一个时间间隔生成一个完整的日历?,php,mysql,sql,Php,Mysql,Sql,我是mysql程序的新手。我请求您帮助生成一个带有某种程序的日历(每隔一天生成一行)。。。在stackoverflow上,我找到了以下函数: CREATE PROCEDURE filldates(dateStart DATE, dateEnd DATE) BEGIN WHILE dateStart <= dateEnd DO INSERT INTO mytable (mydate) VALUES (dateStart);
CREATE PROCEDURE filldates(dateStart DATE, dateEnd DATE)
BEGIN
WHILE dateStart <= dateEnd DO
INSERT INTO mytable (mydate) VALUES (dateStart);
SET dateStart = date_add(dateStart, INTERVAL 1 DAY);
END WHILE;
END;
CALL filldates('2014-01-01','2014-12-31');
如果您知道如何生成此类表格,我将非常感激
其他mysql信息
innodb_version : 5.5.35-rel33.0
protocol_version : 10
slave_type_conversions
version : 5.5.35-33.0-log
version_comment: Percona Server (GPL), Release rel33.0, Revision 61...
version_compile_machine : x86_64
version_compile_os : Linux
假设您的表至少有以下
CREATE table
语句:
CREATE mytable(
ID INT,
date DATE,
Price INT
);
INSERT INTO mytable (ID, date, Price)
SELECT
t.n,
DATE_ADD('2014-01-01', INTERVAL t.n DAY),
40
FROM (
SELECT
a.N + b.N * 10 + c.N * 100 AS n
FROM
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) c
ORDER BY n
) t
WHERE
t.n <= TIMESTAMPDIFF(DAY, '2014-01-01', '2014-12-31');
然后,您可以使用以下语句为一年中的每一天插入行:
CREATE mytable(
ID INT,
date DATE,
Price INT
);
INSERT INTO mytable (ID, date, Price)
SELECT
t.n,
DATE_ADD('2014-01-01', INTERVAL t.n DAY),
40
FROM (
SELECT
a.N + b.N * 10 + c.N * 100 AS n
FROM
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) c
ORDER BY n
) t
WHERE
t.n <= TIMESTAMPDIFF(DAY, '2014-01-01', '2014-12-31');
您好,谢谢您的帮助…我将您的代码粘贴到PhpMyAdmin上的SQL“Tab”中,但结果出现以下错误:#1064-您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解在“DATE_ADD”('2014-07-01',INTERVAL t.n DAY')附近使用的正确语法,我在select的第一行漏掉了一个逗号,现已修复。还有另一个输入错误,添加了fiddle。Ok似乎有效,但我与此有冲突#1136-“第1行的列计数与值计数不匹配”,您能做些什么只生成日期列值吗?将来我想使用相同的ID。感谢您的建议:DMy bad,我删除了不需要的列,留下了一个逗号,和第一次尝试的错误相同。现在更正。该睡觉了!谢谢你们男人们:D工作得很有魅力!