我試圖在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不能在幾小時內循環,但只有一天。
用'設置currentdate'更換ENT將日期值(2017-05-30)的內容與'08:00:00'相關聯。如果你刪除'set currentdate'這行並且用'SET stoppete ='2017-05-30 20:00:00'更改'set stoppete'會發生什麼? – davejal
一個更快的選項來測試將刪除行'set currentdate'和'設置stoppete'來測試它是否工作,然後你可以相應地進行限制(從上午8點到晚上8點) – davejal
不要忘記你錯過了在'0'前面的''',並檢查你試圖插入的字段的數量 – davejal