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

时间:2013-01-17 11:23:49

标签: mysql

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

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

3 个答案:

答案 0 :(得分:25)

UPDATE `table`
SET `column` = str_to_date( `column`, '%d-%m-%Y' );

有关STR_TO_DATE功能的更多信息。


由于您的列名为date1,因此您可以在上述语法中将column替换为date1,代码应为:

UPDATE `table`
SET `date1` = str_to_date( `date1`, '%d-%m-%Y' );

答案 1 :(得分:7)

此处的其他答案都存在风险,因为如果出错,您将丢失数据。更安全的方法是使用DATE(或DATETIME,如果您还需要时间)格式在数据库上创建一个新字段,然后运行像

这样的查询
UPDATE `table` SET `my_new_date_field` = STR_TO_DATE( `my_old_data_field`, '%d/%m/%Y');

这样,如果%d/%m/%Y位错误,您就不会丢失数据。

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

答案 2 :(得分:4)

使用MySQL的STR_TO_DATE功能

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

UPDATE `tbl` SET `date1` = STR_TO_DATE(`date1`, '%d-%m-%Y') WHERE 1=1

然后将字段转换为日期。

最重要的是要记住在此之后插入日期作为Y-m-d格式。