在 DB2 中面临问题 Sql 错误,SQLCODE=-181,SQLSTATE=22007,SQLERRMC=0;*N,DRIVER=3.61.75

Facing issue in DB2 Sql error with SQLCODE=-181, SQLSTATE=22007, SQLERRMC=0;*N, DRIVER=3.61.75

我在 where 子句中使用日期格式时遇到问题,而相同的格式适用于另一个 select 查询。

在 where 子句中使用以下条件的工作查询:

select t1.x,t1.y,t2.z 
  from t1 
    inner join t2 
  where
    TIMESTAMP(SUBSTR(20||t1.TRANSACTION_DATE,1,4)||'-'||SUBSTR(t1.TRANSACTION_DATE,3,2)||'-'||SUBSTR(t1.TRANSACTION_DATE,5,2)||' '||SUBSTR(t1.TRANSACTION_TIME,1,2)||':'||SUBSTR(t1.TRANSACTION_TIME,3,2)||':'||SUBSTR(t1.TRANSACTION_TIME,5,2))
      BETWEEN '2018-06-01 00:00:00' AND '2018-06-18 12:01:00';

当同一查询用于 t1 table 和 t3 table 时,如:

select t1.x,t1.y,t3.z 
  from t1 
    inner join t3 
  where
    TIMESTAMP(SUBSTR(20||t1.TRANSACTION_DATE,1,4)||'-'||SUBSTR(t1.TRANSACTION_DATE,3,2)||'-'||SUBSTR(t1.TRANSACTION_DATE,5,2)||' '||SUBSTR(t1.TRANSACTION_TIME,1,2)||':'||SUBSTR(t1.TRANSACTION_TIME,3,2)||':'||SUBSTR(t1.TRANSACTION_TIME,5,2))
      BETWEEN '2018-06-01 00:00:00' AND '2018-06-18 12:01:00';

它不适用于时间戳部分。

注意:Transaction_date 值在 table t1 中采用“180618”格式(yymmdd)。 transaction_time 也是 123030(hhmmss) 格式

您的时间戳值有误。您正在尝试计算 201806-06-18 12:30:30 的时间戳。那是行不通的。

在每个查询中将 SUBSTR(20||t1.TRANSACTION_DATE,1,4) 更改为 SUBSTR(20||t1.TRANSACTION_DATE,1,2)

或者你可以用

替换整个长子串
timestamp_format(digits(t1.transaction_date) || digits(t1.transaction_time), 'YYMMDDHH24MISS')