如何在sql-loader中使用decode?

时间:2013-08-08 15:59:15

标签: oracle sql-loader

我使用sqlldr导入CSV文件,我对日期多种格式有一些问题。

CSV文件中的日期为 DD / MM / YYYY ,如果没有日期则为单点


CSV文件


DATE_COLUMN;OTHER_COLUMN
01/01/2013;other column content 1
.;other column content 2

我的sqlldr

的.ctl文件
LOAD DATA
INFILE '/path/to/my/file.csv'
REPLACE INTO TABLE table_to_fill
FIELDS TERMINATED BY ';'
(
COLUMNDATE "decode(:COLUMNDATE ,NULL,'.', to_date(:COLUMNDATE ,'DD/MM/YYYY'))",
OTHER_COLUMN
)

我使用时导入正常:

decode(:COLUMNDATE ,NULL,'.'))

to_date(:COLUMNDATE ,'DD/MM/YYYY')

但是当我尝试将两者合并时......

以下是错误日志:

Record 1: Rejected - Error on table table_to_fill, column COLUMNDATE.
ORA-01858: a non-numeric character was found where a numeric was expected

我该如何结合这些呢?

我认为“解码”函数的最后一个参数是列的默认值,我错了吗?

1 个答案:

答案 0 :(得分:5)

SQL Loader的“常规”语法应该足够了。试试这个:

LOAD DATA
INFILE '/path/to/my/file.csv'
REPLACE INTO TABLE table_to_fill
FIELDS TERMINATED BY ';'
(
  COLUMNDATE DATE(7) "DD/MM/YYYY" NULLIF COLUMNDATE = "."
  OTHER_COLUMN
)