2017-08-31 53 views
0

だから、私は、データベースに、私はそうのような年のすべての週を保存する「週間」と呼ばれるテーブルを持っている:ストアドプロシージャのMySQL 5.5.16

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

だから、今週のために、行がどのように見えますこれは week 36

ノート:私の週は木曜日から始まり、Wenesdayで終わります。

それが線でそれぞれ週行を挿入する痛みですので、私はこのためにストアドプロシージャを作成したい、ここで私が思い付いたものです:

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

関連する問題