mysql - 无法在 MySql 中将 varchar 转换为 datetime

标签 mysql sql datetime datetime-format

在我的 MySql 表中,有一个名为 _time 的列,类型为 varchar。它保存的值的格式为:年月日时分 没有空格:201409201945 我想将它转换为 datetime 所以我'我这样做:

ALTER TABLE `my_table` CHANGE COLUMN `_time` `date_time` DATETIME NOT NULL; 

它出于某种原因抛出这个错误:

错误代码:1292。不正确的日期时间值:第 1 行的“_date_time”列的“201409201945”0.036 秒

最佳答案

@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

Demo of the 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;

Updated Demo

关于mysql - 无法在 MySql 中将 varchar 转换为 datetime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25948304/

相关文章:

mysql - 错误 SQLSTATE [HY093] : Invalid parameter number: number of bound variables does not match number of tokens

php - 如何显示主分类及其子分类下的所有帖子?

php - 从mysql中显示所有选中的复选框的值并将其显示在表中

c# - 保存按钮不在 sql 数据库中存储信息

mysql - 计算两列类别的总和

mysql - 获取从年初算起不到 10 年的行

sql - 将 unix 时间戳转换为 Date 和 DateTime - SQL/ORACLE

php - 查询在 phpmyadmin 中有效,但在 PHP 脚本中无效

python - 从使用绑定(bind)变量的数据库查询创建 Pandas 数据框

c# - ID 不同的 Linq 计数