首页 > 解决方案 > 截断不正确的日期时间值 - 带有时区的文本字段

问题描述

mysql 5.7

我有两张表 - 一张在 TEXT 字段中带有日期+时间+时区。另一个有一个日期时间字段。

我知道要将值从表 a(varchar)迁移到表 b(日期时间)。我可以选择这两个值并且它们“看起来”相同 - 但 Mysql 不允许插入/更新。

CREATE TABLE a (date_text_with_tz TEXT);
CREATE TABLE b (date_datetime DATETIME);

INSERT INTO b SELECT '2022-03-22 11:11:11';
INSERT INTO a SELECT '2022-03-22T11:11:11+01:00';

-- This shows pretty much the same values
SELECT DATE_FORMAT(a.date_text_with_tz, '%Y-%m-%d %T'), b.date_datetime FROM a
CROSS JOIN
b;

和这个

INSERT INTO b SELECT (DATE_FORMAT(a.date_text_with_tz, '%Y-%m-%d %T')) FROM a

返回

查询错误:错误:ER_TRUNCATED_WRONG_VALUE:截断不正确的日期时间值:'2022-03-22T11:11:11+01:00'

https://www.db-fiddle.com/f/hQPVimJZCvc574a1fJJ5Wf/0

如何将值从 varchar 字段迁移到 datetime 字段?时区可以省略。

标签: mysql

解决方案


由于您不关心时区偏移,这应该可以工作(如果您的所有 TS 字符串都具有+01:00我所假设的)

INSERT INTO b SELECT ( STR_TO_DATE(a.date_text_with_tz, '%Y-%m-%dT%H:%i:%s+01:00')) FROM a

推荐阅读