首页 > 解决方案 > 将 CHAR 列转换为 MySQL 中的 DATETIME 列

问题描述

我有一个表“day_trade”,其中有一个名为“日期”的 CHAR 列,数据格式如下:Thu Apr 26 2018 00:00:22 GMT+0000

我想将此列转换为 DATETIME,以便我可以在列上执行数据转换等。我一直在使用 str_to_date 函数,但它并不总是可靠的。

我可以运行以下 SQL 并以我想要的日期格式获取数据

select convert(str_to_date(date, "%a %b %d %Y %k:%i:%s"),datetime) from alert_test.day_trade

2018-04-26 00:00:22

因此,我尝试运行以下语句:

update alert_test.day_trade set date = convert(str_to_date(date, "%a %b %d %Y %k:%i:%s"),datetime)

计划是将字符串转换为有效的 DATETIME 格式,然后对列执行更改为 DATETIME 类型

0   78  13:17:51    update alert_test.day_trade set date = convert(str_to_date(date, "%a %b %d %Y %k:%i:%s"),datetime)  Error Code: 1292. 

我收到以下错误:

Truncated incorrect datetime value: 'Thu Apr 26 2018 00:00:22 GMT+0000' 0.047 sec

然后我想创建一个 DATETIME 类型的新“date2”列,并尝试从日期中选择,转换并插入到 date2 中:

update alert_test.day_trade set date2 = convert(str_to_date(date, "%a %b %d %Y %k:%i:%s"),datetime)

同样的错误

最后,我为 VARCHAR 类型创建了一个 date3,并认为我将转换为 date3,然后 a) 将该列更改为 DATETIME,或者选择插入到已经是 DATETIME 的 date2 中。

update alert_test.day_trade set date3 = convert(str_to_date(date, "%a %b %d %Y %k:%i:%s"),datetime)

同样的错误。

基本上我无法将我的数据转换为有效的 DATETIME 格式。

标签: mysqlsql

解决方案


我在发布格林威治标准时间后注意到导致问题。我不需要该信息,因此我将其删除,然后转换按预期工作。

update alert_test.day_trade set date = replace(date," GMT+0000", "")

推荐阅读