2012-11-29 39 views
1

我有一個表是從外部來源的數據填充。問題是我得到了同一列的兩種不同格式的日期,格式有'%Y-%m-%d %H:%i'格式和'%Y-%d-%m %H:%i%s'格式的其他格式,它們都是VARCHAR類型。MYSQL同一表具有不同的日期格式

我知道如何將字符串類型的日期字段轉換爲日期/日期時間字段,但是如何處理日期到期方式的差異?是否有可能根據各自的格式更新日期,以便我可以應用WHERE條件以進行更新,只有WHERE date_field'%Y-%m-%d %H:%i'格式,然後是另一個查詢以使日期字段更新爲'%Y-%d-%m %H:%i%s'格式?

現在,當我嘗試用一​​種通用查詢,我得到錯誤這DONOT符合格式的字段更新表:

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'); 

RESPONSE:錯誤代碼:1292截斷不正確的日期時間值: '2010-01-01 00:00:00'

回答

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) 

其他來源

+0

太棒了!完美工作。我完全忘了我可以用案例。謝謝。 – user988544

+0

添加演示鏈接:D –

+0

感謝您增加演示鏈接。 – user988544

0

您不能更新一樣,因爲如果數據在列,這是不同的類型,那麼你無法更新表列,所以你應該刪除列或者爲此制定一個程序,您可以檢查並更換或更新表格。

+0

所以我不能根據他們的格式過濾我的表中的日期? – user988544