2012-04-12 100 views
2

我有一個包含以下數據爲例甲骨文TO_DATE頭痛

10/20/2005 15:08:00 
11252011 15:22:40 

我已經創建了一個臨時日期列,我將內容複製到,刪除字符串列和重命名temp欄字符串列到什麼是一個字符串。

但是在我試圖通過數據複製到新的臨時列,我得到的錯誤:

ERROR 
ORA-01861: literal does not match format string 

這裏是SQL:

update mytable set MYDATE_TEMP = to_date(mystringcol, 'yyyy/mm/dd hh24:mi:ss') 

有沒有辦法複製數據跨越?

+0

您的數據不符合指定的日期格式。試着找到這個數據,如果它是有效的,你可能需要使用解碼,大小寫或替換函數......否則,你可能想編寫一個函數,將該列作爲輸入並返回日期作爲字符串,或者日期本身 – Lock 2012-04-12 14:40:35

回答

6

如果這些是僅有的2種格式,您需要處理嘗試:

update mytable set MYDATE_TEMP = to_date(replace(mystringcol,'/',''), 
             'mmddyyyy hh24:mi:ss') 
+1

如果你有很多格式,你可能需要一個PL/SQL函數來接收字符串,嘗試一堆格式並返回一個日期。一種方式是嵌套的一系列v_return:= to_date(in_text,;其他人則是異常,然後v_return:= <嘗試下一個格式>。如果你這麼做了,爲ORA-1861定義一個命名的異常。一次性數據修復,我只是使用「當其他人」 – 2012-04-12 14:36:39

+0

不喜歡它,我想它應該是mmddyyyy hh24:mi:ss – Jon 2012-04-12 14:58:38

+0

是的,它應該 - 修復答案 – 2012-04-12 15:07:06

0

對於第一個,你可以使用:

update mytable set MYDATE_TEMP = to_date(mystringcol, 'mm/dd/yyyy hh24:mi:ss'); 

對於第二個:

update mytable set MYDATE_TEMP = to_date(mystringcol, 'mmddyyyy hh24:mi:ss');