我正在尝试在MySQL
中创建insert
week
s(当前年份)到我的week
表的过程。但是有一个问题,因为在为下一个添加第一行后,我收到一个错误:number column cannot be null
。我是MySQL
的新手,所以我将不胜感激。
CREATE PROCEDURE generateWeeks()
BEGIN
SET @currentYear = YEAR(CURDATE());
SET @nextYear = @currentYear + 1;
SET @startOfCurrentWeek = CURDATE();
WHILE(@currentYear < @nextYear) DO
SET @endOfCurrentWeek = DATE_ADD(@startOfCurrentWeek , INTERVAL 7 DAY);
SET @weekNumber = WEEK(@startOfCurrentWeek, 3) -
WEEK(@startOfCurrentWeek - INTERVAL DAY(@startOfCurrentWeek)-1 DAY, 3) + 1;
INSERT INTO `week` (`number`, `start_date`, `end_date`)
VALUES (@weekNumber, @startOfCurrentWeek, @endOfCurrentWeek);
SET @startOfCurrentWeek = @endOfCurrentWeek + 1;
SET @currentYear = YEAR(@endOfCurrentWeek);
END WHILE;
END //
DELIMITER ;
EDITED: 表创建:
CREATE TABLE `week` (
`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`number` INT(11) NOT NULL,
`start_date` DATE NOT NULL,
`end_date` DATE NOT NULL
)
为什么第一次while
迭代一切正常(添加了行),但在下一个中我在null
变量中得到@weekNumber
值?
答案 0 :(得分:2)
该行:
SET @startOfCurrentWeek = @endOfCurrentWeek + 1;
会将变量转换为整数。改为使用date_add。
此外,不要使用用户定义的变量(@endOfCurrentWeek),而是使用局部变量(声明v_endOfCurrentWeek日期)。