首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不正确的约会时间。我做错什么了?

不正确的约会时间。我做错什么了?
EN

Stack Overflow用户
提问于 2018-10-17 14:01:01
回答 1查看 57关注 0票数 1

我试图将随机日期时间插入到我的表中,但是当我调用该过程时,它会显示错误,这是我的数据值不正确的,我不知道为什么。有人能帮我解释一下吗?

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

我的创建声明:

代码语言:javascript
运行
复制
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;

我的程序:

代码语言:javascript
运行
复制
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”列

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-17 14:09:25

在执行Insert时,不需要在用户定义的字符串变量周围使用单引号。

取而代之的应该是以下几点:

代码语言:javascript
运行
复制
INSERT INTO `pb2_pb`.`Spored` (`datumPredvajanja`, 
                               `casPredvajanja`, 
                               `aktualno`) 
                       VALUES (datum_predvajanja, 
                               cas_predvajanja, 
                               CONCAT(aktualno, (stevec + 1))
                              );

此外,不要对字符串文本使用双引号。虽然MySQL允许它,但它不符合ANSI标准。在字符串文本周围使用单引号总是比较好的。

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

代码语言:javascript
运行
复制
SET aktualno = 'DA';

另外,为声明的变量设置默认值也是一种很好的做法。例如:

代码语言:javascript
运行
复制
DECLARE aktualno VARCHAR(45) DEFAULT '';
DECLARE stevec INT DEFAULT 0;
DECLARE konecVal INT DEFAULT 0;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52856765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档