Неправильная дата и времяЧто я делаю не так? - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь вставить случайную дату и время в мою таблицу, но когда я вызываю процедуру, она показывает мне ошибку, которая является неверным значением времени данных, и я не знаю почему.Пожалуйста, кто-нибудь может мне помочь и объяснить?

в 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' для столбца 'datumPredvajanja' в строке 1

1 Ответ

0 голосов
/ 17 октября 2018

Вам не нужно использовать одинарные кавычки вокруг определяемых пользователем строковых переменных при выполнении 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;
...