2011-09-08 112 views
0

我有一個奇怪的格式,我需要轉換爲Oracle時間戳(不需要分形秒)。我有兩列,date_entered和time_entered,具有這種格式從我們的AS/400:轉換爲Oracle中的DateTime

1110729 954 
1110811 1216 
1110815 1526 
1110815 1659 
1110817 1007 
1110818 1000 
1110821 1715 
1110822 1320 
1110823 1852 
1110825 1743 
1110826 1100 
1110826 1559 
1110826 1711 
1110826 1906 

日期列是一個AS/400日,與第1個字符作爲2000年標誌YYYMMDD。所有的日期實際上都在2000年以上,所以如果需要,可以忽略第一個字符。

此外,正如你所看到的,我的time_entered字段是24小時timstamp,但它是一個「數字」字段,因此可能有3位數的行。我想編寫一條SQL語句將其轉換爲Oracle時間戳。不是一個函數或任何東西,而只是選擇語句來選擇組合的這兩列的日期時間。

回答

0

我有一個Oracle實例,Sparky正確,只需稍作修改即可。需要將'+'更改爲'||'並且還需要改變「HH」到「HH24」:如下圖所示

TO_TIMESTAMP(SUBSTR(datefield,2)||LPAD(timefield,4,'0'),'YYMMDDHH24MI') 

樣品:

SQL> describe oldvalues2 
Name          Null? Type 
---------------------------------------- -------- ---------------------------- 
DATEVAL           VARCHAR2(7) 
TIMEVAL           VARCHAR2(4) 

SQL> select * from oldvalues2 
    2/

DATEVAL TIME 
------- ---- 
1110729 954 
1110826 1906 

SQL> select to_timestamp(substr(DATEVAL,2)||lpad(TIMEVAL,4,'0'),'YYMMDDHH24MI') 
    2 from oldvalues2 
    3/

TO_TIMESTAMP(SUBSTR(DATEVAL,2)||LPAD(TIMEVAL,4,'0'),'YYMMDDHH24MI') 
--------------------------------------------------------------------------- 
29-JUL-11 09.54.00.000000000 AM 
26-AUG-11 07.06.00.000000000 PM 
+0

謝謝你,我做了修復HH到HH24,但忘了連接字符是不同的。我感謝您注意並修復它。自從我在甲骨文工作了一段時間。 – Sparky

1

你嘗試:

select To_TimeStamp(substr(datefield,2)||lpad(timefield,4,'0'),'YYMMDDHH24MI') 
From table 

我沒有這臺機器上的Oracle,但上面的應該爲你工作。