2017-05-31 135 views
0

我试图在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不能在几小时内循环,但只有一天。

+0

用'设置currentdate'更换ENT将日期值(2017-05-30)的内​​容与'08:00:00'相关联。如果你删除'set currentdate'这行并且用'SET stoppete ='2017-05-30 20:00:00'更改'set stoppete'会发生什么? – davejal

+0

一个更快的选项来测试将删除行'set currentdate'和'设置stoppete'来测试它是否工作,然后你可以相应地进行限制(从上午8点到晚上8点) – davejal

+0

不要忘记你错过了在'0'前面的''',并检查你试图插入的字段的数量 – davejal

回答

0

我认为你有多个问题:

  1. 你错过了一个逗号(你已经解决了更新后
  2. 与线SET currentdate = '08:00:00';SET stoppete = '20:00:00';更换你只有时间输入日期
  3. 你想插入不符合

此插入查询字段量:

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部分将尝试插入到year字段中,而不是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); 
+0

谢谢。现在它可以工作。 –

0

几件事情要检查:

  1. 08:00:00' 是无效的日期值(使用日期时间和日期与结合焦尔诺)
  2. ID列被定义为整数,你的价值观是最有可能超出范围