SQL*Loader/SQL 日期格式问题

SQL*Loader/SQL date formatting issues

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

我遇到了日期格式问题。在我需要上传的 CSV 文件中,日期格式为 "mm:ss.0"。 However when selecting that cell the formula bar shows the full date as a timestamp, eg "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 上传 window 中的 "Data Type" 框的内容,这将也适用于 SQL*Loader。到目前为止我已经尝试过:

文件是通过电子邮件发送给我的,所以我无法更改 Excel 中的格式(虽然如果我打开文件并手动执行一次上传就可以,但重点是我希望这一切发生时没有我的影响!)

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

格式@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 there. If there is no transformation required you can just not specify the data type and let it default to CHAR and reply on implicit conversion to the table column data type; or if you want to specify it you need 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'
)