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

Pra*_*ati 14 mysql

我有一个列date1varchar类型我想要这个列date输入.我尝试更改字段,但所有日期都转换为0000-00-00.格式dd-mm-yyyy只是在varchar中.

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

hjp*_*r92 28

UPDATE `table`
SET `column` = str_to_date( `column`, '%d-%m-%Y' );
Run Code Online (Sandbox Code Playgroud)

有关STR_TO_DATE函数的更多信息.


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

UPDATE `table`
SET `date1` = str_to_date( `date1`, '%d-%m-%Y' );
Run Code Online (Sandbox Code Playgroud)

  • 列类型不会仍然是`VARCHAR`吗? (2认同)

Pet*_*teW 9

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

UPDATE `table` SET `my_new_date_field` = STR_TO_DATE( `my_old_data_field`, '%d/%m/%Y');
Run Code Online (Sandbox Code Playgroud)

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

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


Dhr*_*tel 5

使用MySQL的STR_TO_DATE函数

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

UPDATE `tbl` SET `date1` = STR_TO_DATE(`date1`, '%d-%m-%Y') WHERE 1=1
Run Code Online (Sandbox Code Playgroud)

然后将字段转换为日期。

最重要的是,请记住在此之后以Ymd格式插入日期。