MySQL:更改列类型和日期时间格式

时间:2016-01-01 02:55:57

标签: mysql sql

我的数据库目前将'date'列设置为varchar(20),我的日期格式如下:

1/13/2015 20:00

我想在我的数据库上运行更新,将列类型更改为datetime,并将当前日期的格式更改为更典型的日期,例如

yyyy-mm-dd hh:mi

这可以在MySQL中完成吗?

2 个答案:

答案 0 :(得分:3)

使用 STR_TO_DATE 功能

  

这是DATE_FORMAT()函数的反转。它需要一个字符串   str和格式字符串格式。 STR_TO_DATE()返回DATETIME值   如果格式字符串包含日期和时间部分,或DATE或   如果字符串仅包含日期或时间部分,则为TIME。如果   从str中提取的日期,时间或日期时间值是非法的,   STR_TO_DATE()返回NULL并产生警告。

查看已转换日期

select str_to_date(date_column, '%m/%d/%Y %h:%i') 
from tablename

确保一切正常,然后运行update声明

update tablename set date_column = str_to_date(date_column, '%m/%d/%Y %h:%i')

最好将datetime数据存储在datetime数据

Alter table tablename modify column date_column datetime 

答案 1 :(得分:0)

是的,它可以在mysql中完成。由于您现有的数据与mysql的日期时间格式不兼容,因此不能一步完成。

  1. 在更新声明中使用str_to_date()函数将文本数据更改为mysql的本机日期时间格式(yyyy-mm-dd hh:mm:ss)。
  2. 使用ALTER TABLE ... MODIFY COLUMN ...命令将列的数据类型更改为datetime。
  3.   

    警告此转换可能会导致数据更改。例如,   如果缩短字符串列,则可能会截断值。阻止   转换为新数据类型时成功的操作   会导致数据丢失,在使用前启用严格的SQL模式   ALTER TABLE(参见第5.1.7节“服务器SQL模式”)。

    第一步是处理数据转换问题,但是,最好在第二步之前启用严格的sql模式。如果您不确定,请创建另一个datetime列并使用str_to_date()更新其值,以并排查看原始值和转换值。