2014-10-06 181 views
0

我有一個excel格式的數據集需要被導入到表中的數字轉換爲日期,一列是一個日期,但數據存儲在數字格式,如41275,導入時數據,我試圖選擇數據格式爲yyyy-mm-dd,它給出了一個錯誤:不是一個有效的月份,也嘗試過MM/DD/YYYY也錯誤:一個月中的一天必須在1月和最後一天之間。沒有人知道這個數字是什麼,當我將數據導入數據庫時​​,我怎樣才能將它轉換成日期格式?謝謝!如何在Oracle SQL Developer中

+0

excel給你的是自1900年1月1日以來的天數... – DarkSquirrel42 2014-10-06 07:43:03

+0

@ DarkSquirrel42我不明白,如何將數字轉換爲日期格式?這個數字是指某個日期嗎? – user2810081 2014-10-06 07:49:01

+0

我認爲將單元格類型更改爲文本的最佳方式可能是使用其他列'= text(Date_col,'yyyy.mm.dd')'來導出csv。現在你有一個delimetered csv,其中的日期是yyyy.mm.dd,現在你可以很容易地導入沒有錯誤。或者,如果您熟悉java,請使用excel api編寫簡單的代碼,讀取所有行並使用jdbc插入。 (我使用這個,如果我導入鉅額金額,需要獲得日期,如果少量我只是簡單的文本單元格和導入沒有問題) – Csanesz 2014-10-06 11:01:28

回答

0

你得到的數字是在特定日期的Excel中表示...

Excel存儲日期的天數,從在特定日期來算......準確地說:

1 = 1-JAN-1900
2 = 2-JAN-1900
...
30 = 30-JAN-1900

所以,讓你的Excel數到Oracle日期,你可能想嘗試像這樣...

to_date('1899-12-31','yyyy-mm-dd') + 41275 
+1

當心Excel的1900年 - 年度錯誤;-) http://support2.microsoft.com/kb/214326/en-us – 2014-10-06 08:01:58

+0

請注意Oracle中不存在的'date_add'函數和''interval'文字的錯誤拼寫。 ;-) – nop77svk 2014-10-06 08:04:43

+0

@ nop77svk好,據我可以看到,DATE_ADD與Oracle沒有問題......至少數天,把它歸結爲「+」 – DarkSquirrel42 2014-10-06 08:08:58

2

表達(關於Excel的閏年蟲AmmoQ提到),你要找的是:

case 
    when yourNumberToBeImported <= 59 then date'1899-12-31' + yourNumberToBeImported 
    else date'1899-12-30' + yourNumberToBeImported 
end 

然後,您既可以

  • 創建(國際)在Oracle數據庫中創建臨時表,將數據從Excel加載到表中,然後將數據從臨時表中重新加載到包含上述計算的目標表中。

,或者你可以

  • 加載從Excel中一個持久表在Oracle數據庫中的數據,並創建了持久表,該表將包含上述計算的視圖。