1

我正在尝试将随机日期时间插入我的表中,但是当我调用该程序时,它显示错误,即我的数据时间值不正确,我不知道为什么。请问有人可以帮我解释一下吗?

在 datumPredvajanja 中,我只想在 casPredvajanja 中设置日期,我只想设置时间,我该怎么做?我确信我在 datum_predvajanja 中的随机时间生成是正确的。

我的创建声明:

CREATE TABLE IF NOT EXISTS `pb2_pb`.`Spored` (
  `ID_Spored` INT NOT NULL,
  `datumPredvajanja` DATETIME NOT NULL,
  `casPredvajanja` DATETIME NOT NULL,
  `aktualno` VARCHAR(45) NOT NULL
)
ENGINE = InnoDB;

我的程序:

DELIMITER //
CREATE PROCEDURE polni_spored (st_sporeda INT)
    BEGIN
        DECLARE datum_predvajanja DATETIME;
        DECLARE cas_predvajanja DATETIME;
        DECLARE aktualno VARCHAR(45);
        DECLARE stevec INT;
        DECLARE konecVal INT;

        SET stevec = 0;
        SET konecVal = st_sporeda;

        WHILE (stevec < konecVal) DO
            SET datum_predvajanja = (SELECT DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(NOW()) + FLOOR(0 + (RAND() * 63072000))), '%Y-%m-%d'));
            SET cas_predvajanja = NOW() - INTERVAL FLOOR(RAND() * 1000) DAY;
            SET aktualno = "DA";

            INSERT INTO `pb2_pb`.`Spored` (`datumPredvajanja`, `casPredvajanja`, `aktualno`) VALUES ('datum_predvajanja', 'cas_predvajanja', CONCAT(aktualno, (stevec + 1)));

            SET stevec = stevec + 1;
        END WHILE;
    END //

DELIMITER ;

错误代码:1292。不正确的日期时间值:第 1 行的列 'datumPredvajanja' 的 'datum_predvajanja'

4

1 回答 1

0

在执行Insert.

它应该是以下内容:

INSERT INTO `pb2_pb`.`Spored` (`datumPredvajanja`, 
                               `casPredvajanja`, 
                               `aktualno`) 
                       VALUES (datum_predvajanja, 
                               cas_predvajanja, 
                               CONCAT(aktualno, (stevec + 1))
                              );

此外,不要对字符串文字使用双引号。虽然 MySQL 允许,但它不符合 ANSI SQL 标准。始终最好在字符串文字周围使用单引号。

而不是,SET aktualno = "DA";它应该是:

SET aktualno = 'DA';

此外,为已声明的变量设置默认值也是一个好习惯。例如:

DECLARE aktualno VARCHAR(45) DEFAULT '';
DECLARE stevec INT DEFAULT 0;
DECLARE konecVal INT DEFAULT 0;
于 2018-10-17T14:09:25.313 回答