列不能为null - 过程

时间:2017-06-20 13:18:03

标签: mysql

我正在尝试在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值?

1 个答案:

答案 0 :(得分:2)

该行:

SET @startOfCurrentWeek = @endOfCurrentWeek + 1;

会将变量转换为整数。改为使用date_add。

此外,不要使用用户定义的变量(@endOfCurrentWeek),而是使用局部变量(声明v_endOfCurrentWeek日期)。