问题描述:
一个表格内有两种格式的日期存储在同一字段中,之前存储的格式是 mm / dd / yy ,后来一部分数据的格式是 yyyy / mm / dd。
例如:(这个字段是varchar类型)也就是字符型
想给他转成同一格式。
比如把之前的mm / dd / yy给转成最新yyyy / mm / dd格式。
下面的方式使用DATE_FORMAT是不行的。
UPDATE your_table
SET date_field = DATE_FORMAT(date_field, '%Y/%m/%d')
WHERE date_field = DATE_FORMAT(date_field, '%m/%d/%y')
DATE_FORMAT() 函数仅用于以不同的格式显示日期/时间数据,无法对原数据进行更改。
格式
DATE_FORMAT(date,format)
date 参数是合法的日期。format 规定日期/时间的输出格式。
正确的方式: 使用DATE () 和 SRT_TO_DATE()
UPDATE your_table
SET date_field = DATE(STR_TO_DATE(date_field, '%m/%d/%Y'))
WHERE DATE(STR_TO_DATE(date_field, '%m/%d/%Y')) <> '0000-00-00';
具体语句
结果
MySQL str_to_date()函数
STR_TO_DATE(str,format) 把字符格式的时间转为date类型
这是DATE_FORMAT()函数的反函数。它需要一个字符串str和一个格式字符串格式。如果格式字符串包含日期和时间部分,STR_TO_DATE()返回一个DATETIME值。但如果字符串只包含日期或时间的部分,那就只返回日期或时间值。
<>表示不等于
a<>b -> a!=b
参考 https://stackoverflow.com/questions/4259729/updating-a-date-format-in-mysql