在我的MySql表中,有一列名为_char的varchar类型。它拥有的值采用以下格式:year month day hour minute没有空格:201409201945我想将其转换为,datetime所以我这样做:
year month day hour minute
201409201945
datetime
ALTER TABLE `my_table` CHANGE COLUMN `_time` `date_time` DATETIME NOT NULL;
由于某种原因,它会引发此错误:
Error Code: 1292. Incorrect datetime value: '201409201945' for column '_date_time' at row 1 0.036 sec
@Arkain提到的三个步骤将在功能STR_TO_DATE的帮助下进行
-- add the new column ALTER TABLE `my_table` ADD COLUMN `date_time` DATETIME; -- update the new column with the help of the function STR_TO_DATE UPDATE `my_table` SET `date_time` = STR_TO_DATE(`_time`, '%Y%m%d%H%i'); -- drop the old column ALTER TABLE `my_table` DROP COLUMN `_time`;
STR_TO_DATE的说明符的完整列表可以在DATE_FORMAT处找到,这里摘录了我使用的内容:
%d Day of the month, numeric (00..31) %H Hour (00..23) %i Minutes, numeric (00..59) %m Month, numeric (00..12) %Y Year, numeric, four digits
UPDATE的演示
如果新列应具有属性NOT NOLL,则一种方法可能是在操作之前将sql模式设置为”,然后在以后重置sql_mode:
SET @old_mode = @@sql_mode; SET @@sql_mode = ''; -- permits zero values in DATETIME columns ALTER TABLE `my_table` ADD COLUMN `date_time` DATETIME NOT NULL; UPDATE `my_table` SET `date_time` = STR_TO_DATE(`_time`, '%Y%m%d%H%i'); ALTER TABLE `my_table` DROP COLUMN `_time`; SET @@sql_mode = @old_mode;
更新的演示