2016-09-20 74 views
0

我有一個CSV文件中讀取一個複雜的日期字符串援助。 Oracle的TO_DATE功能無法處理該格式。尋找一種有效的方法來分開這個字符串並返回一個日期對象,以插入到DATE列中。建議使用'DD-MON-YY HH.MI.SS AM'的TO_DATE選項不起作用。這不會改變這個特殊的字符串。因此需要一個自定義函數。我也嘗試過'HH.MI.SS.SSSSS AM'格式,這也不起作用。我發現,如果我放棄小數秒,它將起作用。如果我運行正則表達式來刪除該部分,它應該按預期進行轉換。甲骨文:在分崩離析複雜的日期字符串

的字符串格式:21-OCT-04 01.03.23.966000 PM

我最初的想法是通過空間率先打破,造成三個子字符串。 然後通過 - 打破第一個子字符串,並將第二個字符串打散,然後直接將結果片段加載到DATE對象中。

是否有更好的方法,我可以使用?

謝謝你,艾倫

+0

,所以你並不需要保存的時間戳'.96000'部分?如果是這樣,請編輯你的Q來表明這一點。祝你好運。 – shellter

+0

如何使用regexp_replace刪除「.966000」部分,然後對其餘部分應用轉換? –

回答

4

使用自己的東西,這是一個時間戳文字創造一個時間戳,然後將它轉換「的日期」:

select 
    cast(to_timestamp('21-OCT-04 01.03.23.966000 PM', 'dd-MON-rr hh.mi.ss.ff AM') as date) dt 
from dual; 

DT 
---------------------- 
2004/10/21 01:03:23 PM 

(輸出格式取決於我的具體會話NLS_DATE_FORMAT,我居然改變了這個例子來'yyyy/mm/dd hh:mi:ss AM'

+0

謝謝你,這個伎倆。在Oracle中查找日期非常複雜且不直觀。我非常感謝幫助。 –