SQL * Loader / SQL日期格式问题

时间:2016-02-10 15:23:54

标签: sql oracle formatting timestamp sql-loader

我正在尝试创建一个自动流程,每天将文件上传到Oracle数据库。

我遇到日期格式问题。在我需要上传的CSV文件中,日期格式为" mm:ss.0"。但是,当选择该单元格时,公式栏会将完整日期显示为时间戳,例如" dd / mm / yyyy hh24:mi:ss"。我试图将其上传到的列是TIMESTAMP(6)。

我不确定在SQL * Loader中放入什么格式。目前这是我的控制文件,其中包含错误:

OPTIONS (SKIP=1)
LOAD DATA
INFILE 'C:\Users\test.csv'
INSERT INTO TABLE test
FIELDS TERMINATED BY "," 
TRAILING NULLCOLS
(
id integer,
created_at timestamp 'DD/MM/YYYY HH24:MI:SS',
)

可能是错误的,我目前的工作假设是,如果我能找到将什么放入"数据类型"手动Oracle SQL上载窗口中的框也适用于SQL * Loader。到目前为止,我已经尝试过:

  • DD/MM/YYYY HH24:MI:SS - 错误:CREATED_AT GDK-05043:无效月份
  • DD/MM/YYYY HH24:MI:SS.FF - 错误:CREATED_AT GDK-05043:无效月份
  • MI:SS.0 - 错误:CREATED_AT GDK-05021:日期格式无法识别
  • MI:SS.FF - 错误:CREATED_AT GDK-05030:日期格式模式在转换整个输入字符串之前结束。
  • HH24:MI:SS.FF错误:CREATED_AT GDK-05030:日期格式模式在转换整个输入字符串之前结束。

该文件正在通过电子邮件发送给我,因此我无法更改Excel中的格式(如果我打开文件并手动执行一次上传,则可行,重点是我想要这样做发生在没有我的冲动!)

如果你能指出我正确的方向,那就太好了。

1 个答案:

答案 0 :(得分:1)

@Boneist格式指出你在SQL * Loader中工作;将控制文件修改为:

OPTIONS (SKIP=1)
LOAD DATA
INFILE 'test.csv'
INSERT INTO TABLE test
FIELDS TERMINATED BY ","
TRAILING NULLCOLS
(
id integer,
created_at timestamp 'YYYY-MM-DD HH24:MI:SS.FF'
)

test.csv包含:

ID,Created at
1,2016-02-10 12:13:14.0

加载记录罚款:

Total logical records skipped:          1
Total logical records read:             1
Total logical records rejected:         0
Total logical records discarded:        0

虽然它可能无法获得您期望的数据:

select * from test;

        ID CREATED_AT                 
---------- ----------------------------
 808594481 10-FEB-16 12.13.14.000000000

你可能并不真正意味着integer。如果不需要转换,您可以不指定数据类型,并将其默认为CHAR并回复隐式转换为表列数据类型;或者如果你想指定它,你需要the external keyword

...
(
id integer external,
created_at timestamp 'YYYY-MM-DD HH24:MI:SS.FF'
)

select * from test;

        ID CREATED_AT                 
---------- ----------------------------
         1 10-FEB-16 12.13.14.000000000

或者您可以指定所需的转换:

...
(
id "to_number(:id)",
created_at timestamp 'YYYY-MM-DD HH24:MI:SS.FF'
)