将CHAR列转换为MySQL中的DATETIME列

时间:2018-04-26 18:21:00

标签: mysql sql

我有一个表'day_trade',其中一个名为'date'的CHAR列包含以下格式的数据: 2018年4月26日星期四00:00:22 GMT + 0000

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

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

df %>% group_by(id, init_cont, family, 
        description = gsub("^(impact).*","\\1", description)) %>%
  summarise(value = mean(value))

# # A tibble: 6 x 5
# # Groups: id, init_cont, family [?]
#      id init_cont family description value
#   <int> <chr>     <chr>  <chr>       <dbl>
# 1     1 K         S      impact       2.00
# 2     1 K         S      read         2.00
# 3     2 I         S      impact       3.00
# 4     2 I         S      read         1.00
# 5     3 K         D      impact       4.00
# 6     3 K         D      read         3.00

2018-04-26 00:00:22

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

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

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

update alert_test.day_trade set date = convert(str_to_date(date, "%a %b %d %Y %k:%i:%s"),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. 

然后我想创建一个DATETIME类型的新'date2'列,并尝试从date选择,转换并插入date2:

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

同样的错误

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

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

同样的错误。

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

2 个答案:

答案 0 :(得分:0)

  

我有一张桌子&#39; day_trade&#39;使用名为&#39; date&#39;的CHAR列以下格式的数据:2018年4月26日星期四00:00:22 GMT + 0000

     

str_to_date(date, "%a %b %d %Y %k:%i:%s")

     

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

你错过了一点,时区和偏移。

str_to_date(date, "%a %b %d %Y %k:%i:%s GMT+0000")

如果您很幸运并且所有日期时间都是格林尼治标准时间,那么您已经完成了。

如果没有,那就是另一个问题。

答案 1 :(得分:0)

我发布GMT后发现了这个问题。我不需要这些信息所以我只是将其删除然后转换按预期工作。

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