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 に答える