db2导入带有空日期的csv

时间:2012-03-05 05:27:07

标签: db2

我跑这个

 db2 "IMPORT FROM C:\my.csv OF DEL MODIFIED BY COLDEL, LOBSINFILE DATEFORMAT=\"D/MM/YYYY\" SKIPCOUNT 1 REPLACE INTO scratch.table_name"

但是我的某些行有一个空的日期字段,所以我收到此错误

以“”“”开头的SQL3191N与用户指定的DATEFORMAT,TIMEFORMAT或TIMESTAMPFORMAT不匹配。该行将被拒绝。

我的CSV文件看起来像这样

"XX","25/10/1985"
"YY",""
"ZZ","25/10/1985"

我意识到如果我插入charater而不是空白字符串,我可以使用 NULL INDICATORS 参数。 但是,我无权更改CSV文件。有没有办法忽略将空字符串导入为空?

2 个答案:

答案 0 :(得分:1)

我什么都不知道。是的,理想情况下,日期字段应为null。

可能最好的做法是将数据加载到临时/临时表中,其中不是日期列 - 只需将其保留为字符数据(看起来你已经是无论如何使用临时表)。之后,如果值为空,则使用CASE语句将信息转换为空日期,在执行INSERT到真实表时,应该是微不足道的。

答案 1 :(得分:1)

这是输入文件中的错误。 DB2区分NULL和零长度字符串。如果您需要具有NULL日期,则NULL将根本没有引号,例如:

"AA",

如果您无法更改输入文件的格式,则有2个选项:

  • 将数据插入临时表(将DATE列更改为char),然后使用SQL填充最终目标表

  • 编写一个程序来解析(“修复”)输入文件,然后导入生成的固定数据。您通常可以在不必将整个文件写入磁盘的情况下执行此操作 - 您的程序可以写入命名管道,并且DB2 IMPORT(和LOAD)实用程序能够从命名管道读取。