【问题标题】:incorrect date value error in mysql stored proceduremysql存储过程中不正确的日期值错误
【发布时间】:2015-06-05 02:45:02
【问题描述】:

我来自客户端 javascript/angular 的请求负载

active: 1
appId: "asdf"
description: "asdf"
from: "06/16/2015"
name: "gdsfg"
to: "06/18/2015"

Node.js 代码是

var query = "SET @start = '" + request.body.from  + "'; \
                         SET @end = '" + request.body.to + "'; \
                         SET @event_id = " + rows.insertId + "; \
                         CALL day(@start, @end, @event_id);";

错误返回是

{ [Error: ER_TRUNCATED_WRONG_VALUE: Incorrect date value: '06/16/2015' for column 'start' at row 2]
  code: 'ER_TRUNCATED_WRONG_VALUE',
  errno: 1292,
  sqlState: '22007',
  index: 3 }

存储过程:

(本质上,它采用 from 和 to 日期并根据差异创建行数)。

CREATE DEFINER=`root`@`localhost` PROCEDURE `day`(start DATE, end DATE, event_id INT)
BEGIN
    WHILE start <= end DO
        INSERT INTO day(date, event_id) VALUES(start, event_id);
        SET start = start + 1;
    END WHILE;
END

问题:

不知道是什么原因造成的,谁能帮忙

编辑 - 查询输出

SET @start = '06/16/2015'; SET @end = '06/18/2015'; SET @event_id = 3; CALL day(@start, @end, @event_id);

【问题讨论】:

  • startend 长什么样子?

标签: mysql sql node.js stored-procedures


【解决方案1】:

我猜date 存储为日期。但start 不是,它可能只是一个看起来像日期的整数。

如果是这样,这将解决您的问题:

WHILE start <= end DO
    INSERT INTO day(date, event_id) VALUES(start, event_id);
    SET start = date_add(@tart, interval 1 day);
END WHILE;

编辑:

这不是问题。问题出在调用代码中。所以试试:

var query = "SET @start = str_to_date('" + request.body.from  + "', '%m/%d/%Y'); \
                         SET @end = str_to_date('" + request.body.to + "', '%m/%d/%Y'); \
                         SET @event_id = " + rows.insertId + "; \
                         CALL day(@start, @end, @event_id);";

【讨论】:

  • 它曾经与start = start + 1 一起工作得很好,我确实应用了你的date_add 方法但仍然是同样的错误
  • 将日期格式更改为 YYYY-MM-DD 格式,即“2015-06-16”和“2015-05-18”。
  • 这是美国的,他们希望看到 MM-DD--YYYY,但它确实解决了问题,我想知道为什么它以前可以工作,
  • ISO 标准和 MySQL 的标准是 YYYY-MM-DD。尝试使用该格式,看看它是否有效。如果是,则使用用户输入的格式为数据库创建适当的日期格式。
  • 能否请您在存储过程查询中添加一些 date_format 代码,日期为mm/dd/yyyy
【解决方案2】:

您应该在查询中使用 'yyyy-mm-dd' 格式而不是 'mm/dd/yyyy'。因为您的程序参数是日期类型

你的查询应该是这样的

SET @start = '2015-06-16'; SET @end = '2015-06-18'; SET @event_id = 3; CALL day(@start, @end, @event_id);

【讨论】:

    猜你喜欢
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    相关资源
    最近更新 更多