我正在尝试在MySQL
中创建一个过程那insert
week
s(当年)发送至我的 week
table 。但存在一个问题,因为在为下一行添加第一行后,我收到错误: 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 ;
编辑: 表创建:
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
变量?
最佳答案
行:
SET @startOfCurrentWeek = @endOfCurrentWeek + 1;
会将变量转换为整数。请改用 date_add。
此外,最好使用局部变量(声明 v_endOfCurrentWeek 日期),而不是使用用户定义的变量 (@endOfCurrentWeek)。
关于mysql - 列不能为空 - 过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44654203/