mysql - 列不能为空 - 过程

标签 mysql

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

相关文章:

java - Sqoop:错误 manager.SqlManager:从数据库读取时出错:java.sql.SQLException:

mysql - 如何对mysql中已经求和的别名列进行求和

mysql - 调用存储过程然后接口(interface)失败

MySQL 在没有 TRANSACTION 的批量 INSERT 上暂停索引重建

mysql - 创建新的 MySQL 数据库最有效的方法是什么

mysql - Mongo 和 Mysql(MyIsam) 之间有很大的速度差异吗?

php - MSQLI 选择自

java - tomcat.dbcp...无法为连接 URL '' 创建类 'null' 的 JDBC 驱动程序

Mysql if 子句序列

mysql - 中间 MySQL 查询 : updating table column based on separate table column value