我试图在08:00:00和20:00:00之间创建一个表,所有行都表示半个小时。每30分钟一次MySQL表行
我的表:
CREATE TABLE cal (
id INTEGER PRIMARY KEY,
year INTEGER NOT NULL,
month INTEGER NOT NULL,
day INTEGER NOT NULL,
half INTEGER NOT NULL,
hour INTEGER NOT NULL,
checked TINYINT(1) DEFAULT 0, -- Check if is reserved
) Engine = MyISAM;
,我的方法:
CREATE PROCEDURE fill_date_dimension(IN giorno DATE)
BEGIN
DECLARE currentdate DATE;
DECLARE stoppete DATE;
SET currentdate = '08:00:00';
SET stoppete = '20:00:00';
WHILE currentdate < stoppete DO
INSERT INTO cal VALUES (
concat(DATE_FORMAT(currentdate, '%Y'),DATE_FORMAT(currentdate, '%m'),DATE_FORMAT(currentdate, '%d'),DATE_FORMAT(currentdate, '%H'),DATE_FORMAT(currentdate, '%i')),
DATE_FORMAT(giorno, '%Y'),
DATE_FORMAT(giorno, '%m'),
DATE_FORMAT(giorno, '%d'),
DATE_FORMAT(currentdate, '%i'),
DATE_FORMAT(currentdate, '%H'),
0);
SET currentdate = DATE_ADD(currentdate,INTERVAL 30 MINUTE);
END WHILE;
END
但是,当我尝试调用fill_date_dimension( '2017年5月30日'),它永远不会填充表。
我认为问题是while循环和MySQL不能在几小时内循环,但只有一天。
用'设置currentdate'更换ENT将日期值(2017-05-30)的内容与'08:00:00'相关联。如果你删除'set currentdate'这行并且用'SET stoppete ='2017-05-30 20:00:00'更改'set stoppete'会发生什么? – davejal
一个更快的选项来测试将删除行'set currentdate'和'设置stoppete'来测试它是否工作,然后你可以相应地进行限制(从上午8点到晚上8点) – davejal
不要忘记你错过了在'0'前面的''',并检查你试图插入的字段的数量 – davejal