我正在尝试创建一个自动流程,每天将文件上传到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中的格式(如果我打开文件并手动执行一次上传,则可行,重点是我想要这样做发生在没有我的冲动!)
如果你能指出我正确的方向,那就太好了。
答案 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'
)