Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL表每30分钟一行_Mysql_Loops_Stored Procedures - Fatal编程技术网

MySQL表每30分钟一行

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

我正在尝试创建一个表,在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
创建过程填充日期维度(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);
    

    有几件事需要检查:

  • “08:00:00”不是有效的日期值(使用datetime并将giorno与date组合)
  • id列定义为整数,您的值很可能超出范围

  • 使用
    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
    之前错过了一个
    ,请检查您尝试插入的字段数量