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

Sql Netezza中的错误时间戳外部表示错误,sql,netezza,Sql,Netezza,我在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 timest

我在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 ''
正如我看到的,
slafirime
SLA_expirime_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

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

TESTDB.ADMIN(ADMIN)=> select coalesce(current_timestamp, '');
ERROR:  Bad timestamp external representation ''
当然,第二个问题是空值不会加入。如果您仍然想加入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
         )
      )

我相信有一个默认值是传递到时间戳列。尝试传递'00-00-00 00:00:00'@Abhis,而不是传递空间,不幸的是,在这一点上,我不得不接受现有数据。当前,此字段中有
NULL
值column@Abhis,我尝试了您的解决方案,然后得到了
ERROR[HY000]ERROR:Bad timestamp external representation'00-00-00 00:00:00'
您还可以使用
isnotfalse()
istrue()
函数简化空对空的比较。