Netezza:错误[HY000]错误:pg_atoi:“[NULL]”中的错误:无法解析“[NULL]”

时间:2014-11-14 19:16:09

标签: sql toad netezza

我使用NZload从db2将文件加载到Netezza。要首先使用NZload,我们需要在Netezza中创建一个表来接收数据,因此为此目的创建了表Table1,所有列都具有数据类型character varying。我成功地将所有记录加载到此表中。

现在我想将几列的数据类型更改为date,以便我按月和年标准进行搜索。我创建了另一个表Table2,其中包含数据类型为date的列,并且在尝试将数据从Table1移动到Table2时出现错误:

"ERROR [HY000] ERROR: pg_atoi: error in "[NULL]": can't parse "[NULL]" "

如何成功执行此数据类型转换?

两个表的DDL:

CREATE TABLE ID1
   (
      ID          CHARACTER VARYING(100) NULL,
      ID_NUM      CHARACTER VARYING(100) NULL,
      CREATE_TIME CHARACTER VARYING(100) NULL,
      CRT_DTE     CHARACTER VARYING(100) NULL,
      UPDATE_TIME CHARACTER VARYING(100) NULL,
      PLAN_YEAR   CHARACTER VARYING(100) NULL,
      DLV_DTE     CHARACTER VARYING(100) NULL,
      STATUS      CHARACTER VARYING(100) NULL
   );

CREATE TABLE ID2
   (
      ID          INTEGER NULL,
      ID_NUM      INTEGER NULL,
      CREATE_TIME DATETIME NULL,
      CRT_DTE     DATETIME NULL,
      UPDATE_TIME DATETIME NULL,
      PLAN_YEAR   INTEGER NULL,
      DLV_DTE     DATETIME NULL,
      STATUS      CHARACTER VARYING(100) NULL
   );

2 个答案:

答案 0 :(得分:0)

当Netezza可以弄清楚如何正确转换字符数据时,它会隐式地将字符列转换为其他数据类型。

例如:

TESTDB.ADMIN(ADMIN)=> insert into id1 values
TESTDB.ADMIN(ADMIN)-> (NULL, NULL , '1999-1-1', '2010-01-31', '2014-12-1', NULL, '1900-01-1', NULL);
INSERT 0 1
TESTDB.ADMIN(ADMIN)=> insert into id2 select * from id1;
INSERT 0 1
TESTDB.ADMIN(ADMIN)=> select * from id2;
 ID | ID_NUM |     CREATE_TIME     |       CRT_DTE       |     UPDATE_TIME     | PLAN_YEAR |       DLV_DTE       | STATUS
----+--------+---------------------+---------------------+---------------------+-----------+---------------------+--------
    |        | 1999-01-01 00:00:00 | 2010-01-31 00:00:00 | 2014-12-01 00:00:00 |           | 1900-01-01 00:00:00 |
(1 row)

但是,根据您的DDL和输出,我认为这是对INTEGER的转换失败。似乎表ID1中的数据中某处有一个包含文本值'NULL'的列。

TESTDB.ADMIN(ADMIN)=> insert into id1 values 
(NULL, 'NULL', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT 0 1
TESTDB.ADMIN(ADMIN)=> insert into id2 select * from id1;
ERROR:  pg_atoi: error in "NULL": can't parse "NULL"
TESTDB.ADMIN(ADMIN)=>

我建议检查ID1中的列以查找字符串'NULL',并在适当时替换为实际的NULL。

解决此问题后,您可能会发现varchar列中的日期表示由于格式不正常而未隐式转换。如果是这种情况,那么您可能需要使用to_date函数进行显式转换。

答案 1 :(得分:0)

我已加载到id2中,我将play_year更改为字符变化;从ID2中选择id,DLV_DTE,STATUS 其中月份(DLV_DTE)= 10年份(DLV_DTE)= 2013年

错误:函数'MONTH(TIMESTAMP)'不存在     无法识别满足给定参数类型的函数: