2009-12-18 16 views
3

恰巧我必須從oracle中的varchar2列獲取日期,但格式不一致。某些字段可能有'2009.12.31',其他'2009/12/32 00:00:00'。有沒有我可以用任何標準的結構,這樣我就不必經過在Oracle中轉換爲具有多個可能的掩碼的日期

begin 
    to_date(date, mask1) 
exception 
    begin 
    to_date(date,mask2) 
    exception 
    .. 
    end 
end 

塊或之前的日期字符串分析,以確定正確的面具?像to_date(date, mask1,mask2,..)

+0

聽起來像有什麼不限制進入該Varchar2字段。你如何處理輸入內容不是有效日期字符串的情況? – 2009-12-18 21:24:10

回答

4

不,但某些Oracle日期格式「寬容」了不同,例如,

SQL> select to_date('2009.12.31','YYYY/MM/DD') from dual; 

TO_DATE('20 
----------- 
31-DEC-2009 

這樣可以減少你需要處理的案件量。我建議你按照你所想的方式編寫一個函數,以便它可以從你的代碼中的所有地方調用,你需要處理這樣的日期。

1

您需要列舉您想要支持的所有可能格式 - 請記住一些不明確的格式(例如,「10-11-2009」11月10日或10月11日?),因此您的代碼必須支持另一種格式。

正如託尼所說,一些格式將接受各種輸入,主要是關於分隔符和缺失位的解析(例如'DD-MON-YYYY HH24:MI:SS'將匹配'31 -DEC- 2009 10:30:00','31/deC/2009 10:30','2009年12月31日')。

從這些簡化

除此之外,你將需要一系列的BEGIN(格式)EXCEPTION WHEN OTHERS然後開始(FORMAT2)EXCEPTION WHEN OTHERS然後開始....

相關問題