Netezza 中的时间戳外部表示错误

Posted

技术标签:

【中文标题】Netezza 中的时间戳外部表示错误【英文标题】:Bad timestamp external representation Error in Netezza 【发布时间】:2015-09-06 11:35:55 【问题描述】:

我在 Netezza 中运行下面的查询并收到提到的错误。

查询:

SELECT * FROM WORKORDER SRC  
    INNER JOIN  APPOINTMENT TRG
        ON SRC.ACCESSID = TRG.SEEKER_ID 
        AND (COALESCE(SRC.SLAEXPIRY, '') = COALESCE(TRG.SLA_EXPIRY_DATE_TS, ''))

错误:

ERROR [HY000] ERROR:  Bad timestamp external representation ''

正如我所见,SLAEXPIRYSLA_EXPIRY_DATE_TS 列的 NULL 值有时会尝试以下选项,但没有运气

SELECT * FROM WORKORDER SRC  
    INNER JOIN  APPOINTMENT TRG
        ON SRC.ACCESSID = TRG.SEEKER_ID 
        AND case when COALESCE(SRC.SLAEXPIRY, '') is not null then COALESCE(SRC.SLAEXPIRY, '')
                            else NULL end = case when COALESCE(TRG.SLA_EXPIRY_DATE_TS, '') is not null then COALESCE(TRG.SLA_EXPIRY_DATE_TS, '')
                                            else NULL end

【问题讨论】:

我相信有一个默认值是传递给你的时间戳列。而不是传递空间尝试传递'00-00-00 00:00:00' @Abhis,不幸的是,此时我必须忍受现有数据。目前此列中有NULL @Abhis,我尝试了您的解决方案,然后得到了ERROR [HY000] ERROR: Bad timestamp external representation '00-00-00 00:00:00' 【参考方案1】:

这里的根本问题是空字符串(即'')不能转换为时间戳。

TESTDB.ADMIN(ADMIN)=> select coalesce(current_timestamp, '');
ERROR:  Bad timestamp external representation ''

当然,第二个问题是 NULL 不 JOIN。如果您仍然想加入 NULL,则以下查询应该适合您。不要期望这种基于表达式的连接有很好的性能。

SELECT *
FROM WORKORDER SRC
   INNER JOIN APPOINTMENT TRG
   ON SRC.ACCESSID = TRG.SEEKER_ID
   AND
      (
         (
            SRC.SLAEXPIRY = TRG.SLA_EXPIRY_DATE_TS
         )
      OR
         (
            SRC.SLAEXPIRY           IS NULL
         AND TRG.SLA_EXPIRY_DATE_TS IS NULL
         )
      )

【讨论】:

您还可以使用isnotfalse()istrue() 函数来简化null 到null 的比较。

以上是关于Netezza 中的时间戳外部表示错误的主要内容,如果未能解决你的问题,请参考以下文章

Netezza 从外部文件导入错误:不支持的外部表引用,无法导出形状

错误 [08S01] 将数据插入到 netezza 中的外部表时出现通信链接故障

Netezza 中的表和外部表有啥区别?

使用外部表逻辑在 netezza 中加载数据时出错

在 Netezza 的嵌套查询中无法访问外部表

Netezza 系统目录表包含外部表的重复记录