2017-05-31 9 views
0

私は08:00:00と20:00:00の間に30分rappresentingすべての行でテーブルを作成しようとしています。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 

しかし、私は( '2017年5月30日')fill_date_dimensionを呼び出すようにしようと、それはテーブルを移入することはありません。

私は問題がwhileループであり、mysqlは数時間以内にループすることができないと思うが、唯一の日だと思う。

+0

のうち、最も可能性が高いです'08:00:00 'で日付の値(2017-05-30)の内容を更新します。 'set currentdate'行を削除し、' set stoppete = '2017-05-30 20:00:00'で 'set stoppete'を変更するとどうなりますか? – davejal

+0

テストするより速いオプションは、 'set currentdate'と' set stoppete'の行を削除してそれがうまくいくかどうかをテストすることです。その後はそれに応じて制限することができます(午前8時から午後8時まで) – davejal

+0

あなたが忘れています'、'の前に '0'を挿入し、挿入しようとしているフィールドの量を確認してください – davejal

答えて

0

は、私はあなたが複数の問題があると思う:あなたは(あなたがすでに取り組まカンマを逃した

  1. そのラインSET currentdate = '08:00:00';SET stoppete = '20:00:00';あなたが唯一の時間で入力した日付を置き換えると、更新後の
  2. あなたが

この挿入クエリを対応していない挿入しようとしているフィールドの量:

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フィールドをスキップします。連結部分は、idフィールドではなくyearフィールドに挿入しようとします。

明示的な文字列で検索してください:チェックする事の

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' (日時を使用して、日付とGIORNOを組み合わせた)有効な日付値ではありません
  2. ID列が整数として定義されていて、ENTを交換currentdate`あなたの値は、 `設定で範囲
関連する問題