我有一个表格,其中填充了来自外部来源的数据。问题是我为同一列提供了两种不同格式的日期,有'%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');
响应:错误代码: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');
回复:错误代码:1292。截断错误的日期时间值:'2010-01-01 00:00:00'
答案 0 :(得分: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)
其他来源
答案 1 :(得分:0)
你不能像那样更新,因为如果该列中有数据而且它的类型不同,那么你就不能更新表列,所以你应该删除列或为它做一个程序,你可以检查和替换或更新表。