-2

我正在使用 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'));

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

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

在此处输入图像描述

4

3 回答 3

1

我今天遇到了同样的事情,并以两种方式“修复”了这两种方式。第二种方法可能看起来太复杂了,但如果他们很难自动格式化日期以使其看起来像 Oracle 的标准 dd-mmm-yy,它可能会有所帮助。

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

  2. 将 Excel 中的日期列格式化为 mm/dd/yy,将表导入为文本,使用从临时文本表中编写手动插入语句TO_DATE(date_field,'MM/DD/YYYY')
    • 突出显示列
    • 选择现有格式所在的“更多数字格式”(在 Excel 2010 中,“主页”选项卡上的下拉框中显示“常规”
    • 在类别框中选择“日期”条目
    • 从列表中选择“03/14/01”
于 2012-06-24T01:12:16.143 回答
0

是的,这就是问题所在。

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

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

2)这是“ 04-06-2004 ”吗?还是这些秒是从 1970 年开始的?

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

于 2012-05-02T13:47:49.033 回答
0

Excel“零”日期是 1900 年 1 月 0 日(是的,零)。由于 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 列,然后运行脚本进行日期转换。

分享和享受。

于 2012-05-02T17:12:24.493 回答