我正在尝试将随机日期时间插入到我的表中,但是当我调用该过程时,它向我显示错误,这是我的数据时间值不正确,并且我不知道为什么。请有人可以帮我解释一下吗?
在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。错误的日期时间值:'datum_predvajanja' 第1行的“ datumPredvajanja”列
答案 0 :(得分:0)
在进行Insert
时,您不需要在用户定义的字符串变量周围使用单引号。
应改为以下内容:
INSERT INTO `pb2_pb`.`Spored` (`datumPredvajanja`,
`casPredvajanja`,
`aktualno`)
VALUES (datum_predvajanja,
cas_predvajanja,
CONCAT(aktualno, (stevec + 1))
);
此外,不要对字符串文字使用双引号。尽管MySQL允许,但它不符合ANSI SQL标准。始终最好在String文字周围使用单引号。
应该代替SET aktualno = "DA";
:
SET aktualno = 'DA';
此外,优良作法是为声明的变量设置默认值。例如:
DECLARE aktualno VARCHAR(45) DEFAULT '';
DECLARE stevec INT DEFAULT 0;
DECLARE konecVal INT DEFAULT 0;