2017-08-09 70 views
0

下面是插入有关销售到DB2表中的数据DB2负荷命令插入格式错误

LOAD FROM /scripts/Ojob/data.txt OF DEL 
MODIFIED BY COLDELX09 
METHOD P (1, 2, 3, 4, 5, 6, 7) 
MESSAGES /logs/Ojob/Load_Messages.txt 
INSERT INTO SALES (SALEDATE, SSECTION, POSTCODE, ORDERS, SALES, 
SHIP, NUMBER) 
NONRECOVERABLE INDEXING MODE AUTOSELECT; 
下面

是其中日期栏的格式为样本数据我的加载命令(DD的日期值/月/年)

07/08/2017 4 TN29 0 1 119.94 0.00 111 
    07/08/2017 715 BN3 7 1 0.00 8.95 222 
    07/08/2017 715 CB9 7 1 47.00 8.95 333 

的SALEDATE列是定义为在DB2表DATE类型和它想插入的格式YYYY-MM-DD的时间,但对于一些奇怪的原因,它插入日期值在不正确的月份

因此,上述日期值的预期输出应该在2017-08-07 ,但是当我查询db2表时,它将数据插入到2017-07-08并且它最近开始发生,我真的不知道为什么它这样做,当我重新加载文件没有任何改变的数据加载到正确的日期,任何人都可以解释为什么DB2的功能是这样的? ,从shell脚本调用加载函数。

+0

DB2将根据您的“应用程序代码页”/语言环境显示日期值。所以你需要描述你如何在表上执行SELECT来查看日期值。例如,如果您从unix命令行连接到数据库并发出SELECT,那么DB2将根据您的LANG环境变量的值显示日期值。如果您从Windows进行查询,则DB2将根据DB2CODEPAGE设置(如果存在)或Windows的系统默认区域设置或用于提交SELECT的应用程序定义的区域设置来显示。 – mao

+0

我在工具或unix中查看数据时看不到任何问题,问题是当插入数据时,它会在错误的月份插入数据,其中db工具和unix命令行也反映相同的数据,但数据相同在下一次运行的正确月份插入罚款没有任何change.not确定为什么日期插入错误的月..它采取mm/dd/yyyy值在文件中的mm/dd/yyyy这是不正确的。有没有在Unix/db2的任何配置文件,我可以检查它为什么不正确的第一次运行? – chimbu

+0

如果它是您正在导入的分隔文件(而不是IXF格式文件),那么当该文件工作时以及何时“失败”时,该文件中的日期格式是什么?如果日期格式不是'yyyy-mm-dd',那么如果您的语言环境未设置为匹配,则会出现一些问题。用测试表和测试数据证明这一点,并更改日期值直到你看到它的工作原理。 – mao

回答

0

您是否尝试过在LOAD命令中添加修饰符,例如modified by dateformat="DD/MM/YYYY"以告知DB2您的分隔文件中的日期格式?您必须确定日期格式始终正确。

+0

是的,我尝试了上述步骤加载命令并收到以下错误SQL3191N以“08/08/2017 748 NG25 0 1 35.00”开头的行“F1-1”,列“1”中的字段与用户指定的DATEFORMAT,TIMEFORMAT, 或TIMESTAMPFORMAT。该行将被拒绝。 – chimbu

+0

请忽略上述评论,我修改了加载命令,如dateformat =“DD/MM/YYYY”COLDELX09所修改的那样,现在它以正确的格式加载数据。但是真的没有任何线索说明为什么初始加载将数据插入错误的日期。 – chimbu

+0

只要您保证文件中的格式与其匹配,dateformat修饰符就可以工作。我相信之前的失败是因为当时有效的地区与数据不匹配。 – mao