MYSQL同一个表有不同的日期格式

use*_*544 1 mysql datetime

我有一个表,其中填充了来自外部源的数据.问题是我为同一列提供了两种不同格式的日期,格式中有一些记录,'%Y-%m-%d %H:%i'格式中有其他'%Y-%d-%m %H:%i%s'格式,它们都是VARCHAR类型.

我知道如何将字符串类型的日期字段转换为日期/日期时间字段,但如何处理日期的差异?是否可以根据其各自的格式更新日期,以便我可以应用WHERE更新的条件仅WHERE date_field发生'%Y-%m-%d %H:%i'格式化,然后另一个查询以'%Y-%d-%m %H:%i%s'格式更新日期字段?

现在,当我尝试使用常见查询更新表时,我得到的字段不符合格式:

UPDATE my_table 
SET my_date_field = STR_TO_DATE(my_date_field,'%Y-%m-%d %H:%i:%s');
Run Code Online (Sandbox Code Playgroud)

响应:错误代码:1411.日期时间值不正确:'10 -22-12 15:00'表示函数str_to_date

UPDATE my_table 
SET my_date_field = STR_TO_DATE(my_date_field,'%Y-%d-%m %H:%i');
Run Code Online (Sandbox Code Playgroud)

响应:错误代码:1292.截断的日期时间值不正确:'2010-01-01 00:00:00'

Joh*_*Woo 5

对于10-22-12 15:00你应该使用的这个值,%y-%d-%m %H:%i

虽然2010-01-01 00:00:00,它应该是%Y-%m-%d %H:%i:%s

所以你的查询将使用 CASE

UPDATE my_table 
SET my_date_field = (CASE WHEN CHAR_LENGTH(my_date_field) = 14 
                          THEN STR_TO_DATE(my_date_field,'%y-%d-%m %H:%i')
                          ELSE STR_TO_DATE(my_date_field,'%Y-%m-%d %H:%i:%s')
                      END)
Run Code Online (Sandbox Code Playgroud)

其他来源