2017-08-31 130 views
0

所以我在我的數據庫稱爲表「周」,我這些年來的每星期儲存像這樣:存儲過程的MySQL 5.5.16

table weeks(id, year, num_week, date_min, date_max)

所以本週,行的樣子這個: week 36

注意:我的星期從星期四開始到星期四結束。

既然是痛苦將通過線上的每個周線,我要創建這個存儲過程,這裏就是我想出了:

DELIMITER | 
CREATE PROCEDURE proc_insert_weeks() 

BEGIN 

SELECT year, num_week, date_min, date_max INTO @year, @num_week, @date_min, @date_max 
FROM weeks 
ORDER BY date_min DESC LIMIT 1; 

SET @date_min = DATE_ADD(@date_max INTERVAL 1 DAY); 
SET @date_max = DATE_ADD(@date_min INTERVAL 6 DAY); 
SET @year= YEAR(@date_min); 

IF @num_week < 52 THEN SET @num_week = @num_week + 1; 
ELSE SET @num_week = 1; 
END IF; 

INSERT INTO weeks (year, num_week, date_min, date_max) 
VALUES (@year, @num_week, @date_min, @date_max); 

END | 

DELIMITER ; 

這樣的想法是採取的最後一個記錄該表格並在日期中添加1周,但我甚至無法將其粘貼到過程的創建中。

我在SELECT查詢後得到錯誤,有人能幫我弄清楚我做錯了什麼嗎?

回答

1
drop PROCEDURE proc_insert_weeks; 
DELIMITER | 
CREATE PROCEDURE proc_insert_weeks() 

BEGIN 

SELECT year, num_week, date_min, date_max INTO @year, @num_week, @date_min, @date_max 
FROM weeks 
ORDER BY date_min DESC LIMIT 1; 

SET @date_min = DATE_ADD(@date_max, INTERVAL 1 DAY); 
SET @date_max = DATE_ADD(@date_min, INTERVAL 6 DAY); 
SET @year= YEAR(@date_min); 

IF @num_week < 52 THEN SET @num_week = @num_week + 1; 
ELSE SET @num_week = 1; 
END IF; 

INSERT INTO weeks (year, num_week, date_min, date_max) 
VALUES (@year, @num_week, @date_min, @date_max); 

END | 

DELIMITER ; 

您可以試試上面的代碼。

您在DATE_ADD函數中犯了錯誤。你錯過了,

+0

感謝它正在工作!我會盡快接受這個答案 – NattyRoots