在数据库级别将mysql中的varchar列转换为日期

在数据库级别将mysql中的varchar列转换为日期,mysql,Mysql,我有一列是varchar类型的date1 我希望此列为date类型。 我尝试更改字段,但所有日期都转换为0000-00-00。 格式为dd-mm-yyyy,但为varchar格式 如何使用sql查询或类似的数据库级别转换相同的日期格式(但使用日期格式) UPDATE `table` SET `column` = str_to_date( `column`, '%d-%m-%Y' ); 更多关于函数的信息 由于您的列名是date1,您可以用上述语法中的date1替换column,代码应为: U

我有一列是varchar类型的
date1
我希望此列为
date
类型。 我尝试更改字段,但所有日期都转换为
0000-00-00
。 格式为
dd-mm-yyyy
,但为varchar格式

如何使用sql查询或类似的数据库级别转换相同的日期格式(但使用日期格式)

UPDATE `table`
SET `column` = str_to_date( `column`, '%d-%m-%Y' );
更多关于函数的信息


由于您的列名是
date1
,您可以用上述语法中的
date1
替换
column
,代码应为:

UPDATE `table`
SET `date1` = str_to_date( `date1`, '%d-%m-%Y' );
MySQL的使用功能

首先,您需要更新日期格式的值

UPDATE `tbl` SET `date1` = STR_TO_DATE(`date1`, '%d-%m-%Y') WHERE 1=1
然后将字段转换为日期


最重要的是,请记住在之后以Y-m-d格式插入日期。

这里的其他答案是有风险的,因为如果它们出错,您将丢失数据。一种更安全的方法是在数据库中创建一个日期(或者DATETIME,如果需要时间)格式的新字段,然后运行如下查询

UPDATE `table` SET `my_new_date_field` = STR_TO_DATE( `my_old_data_field`, '%d/%m/%Y');
这样,如果
%d/%m/%Y
位错误,您就不会丢失数据


一旦你满意了,你就可以删除旧的数据字段并重命名新的。

我认为这个主题会很有帮助。不过,列类型不是仍然是
VARCHAR
吗?@Brian OP提到他们试图更改损坏数据的列类型。我建议在更改列类型之前保留数据。我相信这是从一种列数据类型转换为另一种列数据类型时最安全的方法。复制到新列-->转换新列的数据类型。