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