2017-05-31 133 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列被定義爲整數,你的價值觀是最有可能超出範圍