gpt4 book ai didi

mysql - 错误代码 1292 Mysql 日期时间

转载 作者:行者123 更新时间:2023-11-29 05:30:43 25 4
gpt4 key购买 nike

我正在尝试将一个名为 DATE 的列中的日期和时间格式化为 DD/MM/YYYY (Varchar),并将另一个名为 TIME 的列中的日期和时间格式化为 HH:MM:SS 到一个变量中以插入另一列(在日期时间数据类型中)。下面的代码是我的程序。

DROP PROCEDURE IF EXISTS TESTProc;

DELIMITER //



CREATE PROCEDURE TESTproc()

BEGIN

DECLARE LYEAR VARCHAR(45);

DECLARE LMONTH VARCHAR(45);

DECLARE LDAY VARCHAR(45);

DECLARE LTIME VARCHAR(45);

DECLARE LDATETIME DATETIME;

SELECT TIME FROM db.test_table INTO LTIME;

SELECT SUBSTRING(DATE,6,4) FROM db.test_table INTO LYEAR;

SELECT SUBSTRING(DATE,3,2) FROM db.test_table INTO LMONTH;

SELECT SUBSTRING(DATE,1,1) FROM db.test_table INTO LDAY;

SELECT CONCAT(LYEAR,'-', LMONTH,'-','0',LDAY,' ',LTIME) INTO LDATETIME;

INSERT INTO db.test_table(VC19) VALUES (LDATETIME);


END //

Call TESTProc;

当我运行该过程时,我收到错误代码:

Call TESTProc;  Error Code: 1292. Incorrect datetime value: '2013-31-01 16:00:40' for column 'LDATETIME' at row 2

我在 db.test_table 中只有一行。我在表中没有名为“LDATETIME”的列,这只是我的局部变量。我可以从错误中看出我的格式对于 DateTime 'YYYY-MM-DD HH:MM:SS' 是正确的。

为什么会出现这个错误?

更新:这是我的代码现在的样子:

DROP PROCEDURE IF EXISTS DateProc;

DELIMITER //



CREATE PROCEDURE Dateproc()

BEGIN

DECLARE LTIME VARCHAR(45);

DECLARE LDATE VARCHAR(45);

DECLARE LDATETIME DATETIME;

SELECT TIME FROM db.date_table INTO LTIME;

SELECT DATE FROM db.date_table INTO LDATE;


IF LENGTH(LDATE) = 9 AND SUBSTRING(LDATE,2,1) = '/'
THEN SET LDATETIME = CONCAT(SUBSTRING(LDATE,6,4),'-0',SUBSTRING(LDATE,1,1),'-',SUBSTRING(LDATE,3,2), ' ', LTIME);

ELSE IF LENGTH(LDATE) = 9 AND SUBSTRING(LDATE,3,1) = '/'
THEN SET LDATETIME = CONCAT(SUBSTRING(LDATE,6,4),'-',SUBSTRING(LDATE,1,2),'-0',SUBSTRING(LDATE,4,1), ' ', LTIME);

ELSE IF LENGTH(LDATE) = 10
THEN SET LDATETIME = CONCAT(SUBSTRING(LDATE,7,4),'-',SUBSTRING(LDATE,1,2),'-',SUBSTRING(LDATE,4,2), ' ', LTIME);

ELSE IF LENGTH(LDATE) = 8
THEN SET LDATETIME = CONCAT(SUBSTRING(LDATE,5,4),'-0',SUBSTRING(LDATE,1,1),'-0',SUBSTRING(LDATE,3,1), ' ', LTIME);

END IF;

END IF;

END IF;

END IF;


INSERT INTO db.date_table(table_name) VALUES (LDATETIME);


END //


CALL DateProc;

这似乎有效,并且可以解释可能最终出现在我的原始日期列中的任何可变日期。

最佳答案

看值:

'2013-31-01 16:00:40'

这是在尝试使用 31 号的

不清楚这是否仅仅意味着您的测试数据有误,或者您是否需要更改这些行:

SELECT SUBSTRING(DATE,3,2) FROM db.test_table INTO LMONTH;
SELECT SUBSTRING(DATE,1,1) FROM db.test_table INTO LDAY;

到:

SELECT SUBSTRING(DATE,1,2) FROM db.test_table INTO LMONTH;
SELECT SUBSTRING(DATE,4,2) FROM db.test_table INTO LDAY;

请注意从 1 开始的子字符串从 1 到 2 的变化,以及第二个起始位置从 3 到 4 的变化。您需要两位数的月份和日期值,对吗?如果您的数据格式实际上是 D/M/YYYY(即仅在需要时使用两位数字),那么您将无法使用固定的子字符串位置。

关于mysql - 错误代码 1292 Mysql 日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15108606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com