如何在Oracle 11g表中的csv中加载数据中截断或转换日期时间

问题描述 投票:0回答:1

我需要转换格式化为这个2/5/2010 12:00:00 AM的传入日期时间,它必须作为"MM/DD/YYYY"进入表格。我一直在研究,我无法找到用于转换或截断我传入的Datetime的语法。我收到这个错误

SQL*Loader-350: Syntax error at line 11.
Expecting "," or ")", found "(".
,   trunc(EXAMPLE_DATE)            DATE "MM/DD/YYYY" NULLIF (EXAMPLE_DATE

当我尝试使用此代码时

OPTIONS (READSIZE=20971520, BINDSIZE=20971520, ROWS=10000, ERRORS=90000)
LOAD DATA
INFILE *
INTO TABLE EXAMPLE.TABLE
APPEND
FIELDS TERMINATED BY ','  optionally enclosed by '"'
TRAILING NULLCOLS
(
    EXAMPLE1                CHAR NULLIF (EXAMPLE1=BLANKS)
,   EXAMPLE2                CHAR NULLIF (EXAMPLE2=BLANKS)
,   trunc(EXAMPLE_DATE)     DATE "MM/DD/YYYY" NULLIF (EXAMPLE_DATE=BLANKS)
)

我已经尝试过使用to_date,trunc和to_char,但是我不太确定要使用它,以及使用它的语法。显然我不能在我尝试时截断EXAMPLE_DATE

编辑:原始代码看起来像这样

OPTIONS (READSIZE=20971520, BINDSIZE=20971520, ROWS=10000, ERRORS=90000)
LOAD DATA
INFILE *
INTO TABLE EXAMPLE.TABLE
APPEND
FIELDS TERMINATED BY ','  optionally enclosed by '"'
TRAILING NULLCOLS
(
    EXAMPLE1                CHAR NULLIF (EXAMPLE1=BLANKS)
,   EXAMPLE2                CHAR NULLIF (EXAMPLE2=BLANKS)
,   EXAMPLE_DATE        DATE "MM/DD/YYYY" NULLIF (EXAMPLE_DATE=BLANKS)
)

这段代码按照预期的方式使用csv文件只有MM/DD/YYYY格式的日期,但是当给出如下的Datetime时:2/5/2010 12:00:00 AM它会在csv的目录中输出一个.bad文件。

oracle oracle11g sql-loader
1个回答
1
投票

您需要控制文件中的格式与您在数据文件中获得的值相匹配:

,   EXAMPLE_DATE        DATE "MM/DD/YYYY HH:MI:SS AM" NULLIF (EXAMPLE_DATE=BLANKS)

我设置了一个表来匹配你的例子:

create table example_table (example1 varchar2(10), example2 varchar2(10), example_date date);

并且数据文件包含:

A,B,2/5/2010 12:00:00 AM

并且控制文件为:

OPTIONS (READSIZE=20971520, BINDSIZE=20971520, ROWS=10000, ERRORS=90000)
LOAD DATA
INFILE *
INTO TABLE EXAMPLE_TABLE
APPEND
FIELDS TERMINATED BY ','  optionally enclosed by '"'
TRAILING NULLCOLS
(
    EXAMPLE1                CHAR NULLIF (EXAMPLE1=BLANKS)
,   EXAMPLE2                CHAR NULLIF (EXAMPLE2=BLANKS)
,   EXAMPLE_DATE        DATE "MM/DD/YYYY HH:MI:SS AM" NULLIF (EXAMPLE_DATE=BLANKS)
)

通过报告运行:

Commit point reached - logical record count 1

和日志文件说:

Table EXAMPLE_TABLE:
  1 Row successfully loaded.
  0 Rows not loaded due to data errors.
  0 Rows not loaded because all WHEN clauses were failed.
  0 Rows not loaded because all fields were null.

并且该表填充了该数据:

select * from example_table;

EXAMPLE1   EXAMPLE2   EXAMPLE_DA
---------- ---------- ----------
A          B          2010-02-05

你还说:

它必须以“MM / DD / YYYY”的形式进入表格

它必须作为日期进入表格。日期没有任何固有的人类可读格式; Oracle使用自己的内部表示来有效且明确地存储数据。当您查询表格时,您的客户将使用自己的设置或会话的NLS_DATE_FORMAT设置将其转换为可识别的格式进行显示。如果您以所显示的格式查看日期,那么您将设置客户端/会话以将其显示为。我的配置为YYYY-MM-DD,这就是你在我上面的查询输出中看到的内容。

© www.soinside.com 2019 - 2024. All rights reserved.