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。到目前为止我已经尝试过:
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 中的格式(虽然如果我打开文件并手动执行一次上传就可以,但重点是我希望这一切发生时没有我的影响!)
如果你能给我指出正确的方向就太好了。
格式@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'
)
我正在尝试创建一个每天将文件上传到 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。到目前为止我已经尝试过:
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 中的格式(虽然如果我打开文件并手动执行一次上传就可以,但重点是我希望这一切发生时没有我的影响!)
如果你能给我指出正确的方向就太好了。
格式@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'
)