2014-10-06 131 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数据库中的数据,并创建了持久表,该表将包含上述计算的视图。
相关问题