我运行这个
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"
我意识到,如果我插入字符而不是空白字符串,我可以使用NULL INDICATORS参数。但是,我无权更改CSV文件。有没有一种方法可以忽略将空字符串作为null导入?
这是输入文件中的一个错误。DB2区分NULL和零长度字符串。如果您需要NULL日期,NULL将完全没有引号,例如:
"AA",
如果你不能更改输入文件的格式,你有两个选项:
将数据插入临时表(将DATE列更改为char),然后使用SQL填充最终目标表
编写一个程序来解析("修复")输入文件,然后导入生成的固定数据。您通常可以做到这一点,而不必将整个文件写入磁盘——您的程序可以写入到命名管道中,并且DB2IMPORT(和LOAD)实用程序能够从命名管道中读取。
我什么都不知道。是的,理想情况下该日期字段应该为空。
最好的方法可能是将数据加载到临时表中,其中不是日期列-只需将其保留为字符数据即可(无论如何,看起来您已经在使用临时表)。在对实际表执行INSERT
操作时,如果值为空,那么使用CASE
语句将信息转换为空日期应该是微不足道的。