面对DB2 Sql错误,SQLCODE = -181,SQLSTATE = 22007,SQLERRMC = 0; * N,DRIVER = 3.61.75

时间:2018-06-18 09:11:51

标签: db2 db2-400

我在where子句中使用日期格式时遇到问题,而相同的格式设置适用于其他选择查询。

使用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表和t3表时,如:

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';

它不适用于时间戳部分。

注意:表t1中的Transaction_date值为'180618'格式(yymmdd)。 transaction_time也是123030(hhmmss)格式

1 个答案:

答案 0 :(得分:1)

您的时间戳值有误。您正在尝试计算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')