在 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')
我在 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')