更改特定ID的日期格式

时间:2019-09-19 15:04:44

标签: mysql datetime format

我的日期格式有问题,我输入了格式为yyyy-mm-dd hh:ii的记录,而其他记录为dd-mm-yyyy hh:ii的记录,我想将所有日期格式更改为dd-mm -yy hh:ii有解决方案吗? 列类型为VARCHAR

我已经尝试过该代码:

将所有将日期作为字符串的列更新为日期列

UPDATE metric SET `dateColumn` = str_to_date(`dateColumn`,'%d-%m-%Y');

变更表

ALTER TABLE metric MODIFY `dateColumn` DATETIME;

我希望将所有日期格式从yyyy-mm-dd hh:ii更改为dd-mm-yyyy hh:ii

2 个答案:

答案 0 :(得分:0)

根据以下格式应用不同的解析格式:

UPDATE metric SET
dateColumn = str_to_date(dateColumn,
  case
    when dateColumn like '__-%'
      then '%d-%m-%Y %H:%i'
    else '%y-%m-%d %H:%i'
  end)

我不确定解析所使用的确切格式,因为我对这个问题不清楚,但是如果不正确的话,应该将其关闭。

答案 1 :(得分:0)

您的列的数据类型为VARCHAR,因此在对其重新格式化之前,必须通过检查其当前格式将其转换为STR_TO_DATE()的数据类型DATETIME,然后将新格式应用于所有DATE_FORMAT()行:

update metric
set dateColumn = date_format(
  str_to_date(
    dateColumn, 
    case
      when dateColumn like '__-__-____ __:__' then '%d-%m-%Y %H:%i'
      when dateColumn like '____-__-__ __:__' then '%Y-%m-%d %H:%i'
    end
  ),
  '%d-%m-%y %H:%i'
)
where dateColumn like '__-__-____ __:__' or dateColumn like '____-__-__ __:__' 

需要WHERE子句,以防万一还有其他格式。
参见demo