SQL Developer:加载数据日期错误

时间:2012-05-02 13:13:18

标签: plsql oracle-sqldeveloper

我正在使用Oracle SQL Developer 3.0.03。我正在尝试将Excel文件上传到Oracle数据表。我收到错误的日期。数据库中的列是时间戳,我不知道将什么放入“数据加载向导”的日期格式。如果我使用以下格式(dd-mom-yy hh.mi.ss),SQL Developer将显示以下错误:

--Insert failed for row  1 TIMESTAMP_COLUMN GDK-05047: A day of the month must be between 1 and the last day of the month.
--Row 1
INSERT INTO TABLE_1 (Column1, Column2, Column3, TIMESTAMP_COLUMN) VALUES ('Some Text','Some Text','Some more text',to_timestamp('40604.0', 'dd-mon-yy hh.mi.ss'));

IN EXCEL的默认数字格式为:40604.0 如果您将单元格更改为短日期格式,您将获得:2011年3月2日

我想弄清楚我需要将'格式'放入'数据加载向导'的FORMAT部分,该部分将接受EXCEL中的日期格式并将其作为TIMESTAMP上传到Oracle。

enter image description here

3 个答案:

答案 0 :(得分:1)

我今天遇到了同样的事情,并且“固定”了这两种方式。第二种方式可能看起来过于复杂,但如果他们很难将日期格式化自动化为Oracle的标准dd-mmm-yy,那么它可能对某人有所帮助。

  1. 将Excel中的日期列格式化为dd-mmm-yy并直接导入表格。
    • 突出显示列
    • 选择现有格式为“更多数字格式”(在Excel 2010中,它在“主页”选项卡上的“保管箱”中显示“常规”
    • 在“类别”框中选择最后一个“自定义”条目
    • 在“类型:”框中手动输入dd-mmm-yy

  2. 将Excel中的日期列格式化为mm / dd / yy,以文本形式导入表格,使用TO_DATE(date_field,'MM/DD/YYYY')从临时文本表格中编写手动插入语句
    • 突出显示列
    • 选择现有格式为“更多数字格式”(在Excel 2010中,它在“主页”选项卡上的“保管箱”中显示“常规”
    • 在“类别”框中选择“日期”条目
    • 从列表中选择“03/14/01”

答案 1 :(得分:0)

是的,这就是问题所在。

该月的某一天必须介于1和该月的最后一天之间。

1)这些小数是如何创建的?

2)这是“ 04-06-2004 ”吗?或者从1970年开始这几秒钟?

您需要添加有关此数字格式的更多详细信息!

答案 2 :(得分:0)

Excel“零”日期是1月0日(是,零),1900年。由于Oracle无法处理一个月内的“零”日,您需要从Excel值中减去1;因此,以下内容可以让您接近您想要的内容:

SELECT CAST(TO_DATE('01-JAN-1900 00:00:00', 'DD-MON-YYYY HH24:MI:SS') AS TIMESTAMP) +
           NUMTODSINTERVAL(41017.6361109954 - 1, 'DAY')
  FROM DUAL

就“如何导入它”而言,没有Oracle日期格式,我知道这样做。最简单的方法是将值导入NUMBER列,然后运行脚本进行日期转换。

分享并享受。