我已经为这个问题挣扎了太久,似乎无法理解真正的问题是什么。
作为输入,我从呼叫者tms=2020-01-02-03.04.05.060708接收。然后我想实现以下目标-但是我的构建以bindlog错误结束(见底部)。
DCL TMS CHAR(26);
DCL START CHAR(26);
DCL END CHAR(26);
IF TMS ^= ''
THEN
DO;
EXEC SQL SET :START = TMS + 1 MICROSECOND;
EXEC SQL SET :END = TMS + 30 DAYS;
END;
ELSE
DO;
EXEC SQL SET :START = '0001-01-01 00:00:00.000000';
EXEC SQL SET :END = CURRENT TIMESTAMP;
END;
似乎tms没有正确地设置为相应的主机变量,即使tms实际上是一个时间戳。看文档似乎更让我困惑。有没有关于如何对日期/时间变量执行算术操作的线索?
我尝试过在日期格式中添加天数,效果很好。但是在时间戳上加上几天或几微秒会让我头疼。下面的工作就像一个魅力,只是努力理解为什么?
DCL TMS_VALID CHAR(10);
DCL TMS_EMPTY CHAR(10);
IF TMS ^= ''
THEN
DO;
TMS_VALID = SUBSTR(TMS,1,10);
EXEC SQL SET :START = DATE(:TMS_VALID); /* Would like to add 1 microsecond to :START*/
EXEC SQL SET :END = DATE(:TMS_VALID) + 30 DAYS;
END;
ELSE
DO;
TMS_EMPTY = SUBSTR(CURRENT_TIMESTAMP,1,10);
EXEC SQL SET :START = DATE(:TMS_EMPTY) - 30 DAYS;
EXEC SQL SET :END = DATE(:TMS_EMPTY);
END;
下面是bindlog。任何帮助都将不胜感激,谢谢!
DSNX200I :DB2A BIND SQL ERROR
USING TSTSD AUTHORITY
PLAN=(NOT APPLICABLE)
DBRM=AB12345
STATEMENT=455
SQLCODE=-206
SQLSTATE=42703
TOKENS=AB12345I.TMS
CSECT NAME=DSNXORSO
RDS CODE=-225
DSNX200I :DB2A BIND SQL ERROR
USING TSTSD AUTHORITY
PLAN=(NOT APPLICABLE)
DBRM=AB12345
STATEMENT=456
SQLCODE=-206
SQLSTATE=42703
TOKENS=AB12345I.TMS
CSECT NAME=DSNXORSO
RDS CODE=-225
暂无答案!
目前还没有任何答案,快来回答吧!