我试图在08:00:00和20:00:00之间创建一张所有行半小时的表格。
我的表:
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(&#39; 2017-05-30&#39;)时,它从不会填充表格。
我认为问题是while循环和mysql不能在几小时内循环但只有一天。
答案 0 :(得分:0)
我认为你有很多问题:
SET currentdate = '08:00:00';
和SET stoppete = '20:00:00';
,只用时间替换您输入的日期。此插入查询:
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);
将插入7个字段,通常会跳过id字段。 concat部分将尝试插入年份字段,而不是id字段。
尝试显式查询:
INSERT INTO cal (id,year,month,day,half,hour,checked) 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);
答案 1 :(得分:0)
要检查的事情: