MySQL将数据VARCHAR转换为DATETIME

问题描述 投票:0回答:3

users设计不良。created_atupdated_at记录是用VARCHAR类型设置的,并且将值长时间放置在它们中的格式为20.10.2017 8:10

在MySQL中,必须将字段转换为DATETIME类型,并保存先前输入的值。

STR_TO_DATETIME函数不适用,因为它会更改输出格式,但不会将表中的VARCHAR数据类型本身更改为DATETIME数据类型。

ALTER TABLE users MODIFY created_at DATETIME

不起作用

错误消息:

SQL错误[1292] [22001]:数据截断:错误的日期时间值:第1行的列'created_at'为'06 .01.2020 8:10'

mysql datetime varchar
3个回答
1
投票

当您将列从VARCHAR更改为DATETIME时,您无法指定字符串的自定义解析,它必须采用MySQL的默认格式。

所以您需要分多个步骤进行:

  1. 添加DATETIME列。
  2. 通过使用STR_TO_DATE()解析VARCHAR列来填充新列>
  3. 删除旧列并重命名新列。
  4. ALTER TABLE users ADD created_at_dt DATETIME, updated_at_dt DATETIME;
    UPDATE users
    SET created_at_dt = STR_TO_DATE(created_at, '%d.%m.%Y %h:%i'),
        updated_at_dt = STR_TO_DATE(updated_at, '%d.%m.%Y %h:%i');
    ALTER TABLE users 
        DROP created_at, DROP updated_at, 
        RENAME COLUMN created_at_dt TO created_at, RENAME COLUMN updated_at_dt TO updated_at;
    

1
投票

最简单的解决方法是创建新的created_atupdated_at DATETIME列,为它们分配已解析的日期值,然后删除旧列并重命名新列。例如:


0
投票

您的日期具有错误的格式,将其转换为正确的mysql时间,然后更改表

© www.soinside.com 2019 - 2024. All rights reserved.