1

我有一个表,其中填充了来自外部源的数据。问题是我为同一列获得了两种不同格式的日期,有一些格式的记录'%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。日期时间值不正确:函数 str_to_date 的“10-22-12 15:00”

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'

4

2 回答 2

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)

其他来源

于 2012-11-29T15:51:05.317 回答
0

你不能这样更新,因为如果该列中有数据并且它是不同类型的,那么你不能更新表列,所以你应该删除该列或为此创建一个程序,你可以检查并替换或更新表.

于 2012-11-29T15:55:24.023 回答