MySQL表格行每30分钟一次

时间:2017-05-31 15:10:27

标签: 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 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不能在几小时内循环但只有一天。

2 个答案:

答案 0 :(得分:0)

我认为你有很多问题:

  1. 你错过了一个逗号(你已经在更新后解决了这个问题
  2. 使用行SET currentdate = '08:00:00';SET stoppete = '20:00:00';,只用时间替换您输入的日期。
  3. 您尝试插入的字段数量不对应
  4. 此插入查询:

    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)

要检查的事情:

  1. &#39; 08:00:00&#39;是无效的日期值(使用datetime并将giorno与日期结合)
  2. id-column定义为整数,您的值很可能超出范围