MySQL表每30分钟一行
我正在尝试创建一个表,在08:00:00和20:00:00之间的半小时内显示所有行 我的桌子:MySQL表每30分钟一行,mysql,loops,stored-procedures,Mysql,Loops,Stored Procedures,我正在尝试创建一个表,在08:00:00和20:00:00之间的半小时内显示所有行 我的桌子: CREATE TABLE cal ( id INTEGER PRIMARY KEY, year INTEGER NOT NULL, month INTEGER NOT NULL, day INTEGER NOT NU
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
创建过程填充日期维度(giorno date)
开始
声明当前日期;
宣布截止日期;
设置当前日期='08:00:00';
设置Stoppette='20:00:00';
当currentdate<0时
插入到校准值中(
concat(日期格式(当前日期,'%Y')、日期格式(当前日期,'%m')、日期格式(当前日期,'%d')、日期格式(当前日期,'%H')、日期格式(当前日期,'%i')),
日期格式(giorno,“%Y”),
日期格式(giorno,“%m”),
日期格式(giorno,“%d”),
日期格式(当前日期,“%i”),
日期格式(当前日期,'%H'),
0);
设置currentdate=DATE\u ADD(currentdate,间隔30分钟);
结束时;
结束
但当我尝试调用fill\u date\u dimension('2017-05-30')时,它从未填充表
我认为问题在于while循环,mysql不能在几个小时内循环,只能在一天内循环。我认为您有多个问题:
SET currentdate='08:00:00';
和SET stoppette='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);
有几件事需要检查:
使用
set currentdate
替换日期值的全部内容(2017-05-30)使用“08:00:00”。如果删除行set currentdate
并将set stoppette
更改为“set stoppette='2017-05-30 20:00:00”;一个更快的测试选项是删除行set currentdate
和set stoppete
以测试其是否工作正常,然后可以进行相应的限制(从上午8点到晚上8点)不要忘记您在0
之前错过了一个,
,请检查您尝试插入的字段数量