在Cognos 10.2.1(FP7)中,我遇到了两个表(见下文),其中给定的事务可能在同一个" PERIOD",但我想要做的是只给出了月末15日之后交易的结果(即 - 交易可能在2015年的PERIOD中,我只想在2015年10月15日之后的交易)。 PERIOD是用户选择的输入参数 - 我想从PERIOD的一部分构建日期。 (在任何人抱怨语法等之前 - 我已经尝试尽可能简化这一点。)
鉴于表A:
ID varchar
PERIOD varchar
鉴于表B:
ID varchar
TYPE varchar
TRANDATE timestamp2
查询1
[A.PERIOD]=?PARM1? <- this is the user selected input parameter
QUERY2
[B.TYPE] in ('A','B')
然后从A.ID = B.ID上的Query1和Query2的结果创建一个连接,以给出Results1
我已经尝试了以下内容(我尽可能简单地保持这一点 - 所以我只能使用该期间的YEAR部分):
[Results1].[TRANDATE] >= concat(substring([Results1].[PERIOD],1,4),'-10-15T00:00:00.000000000')
[Results1].[TRANDATE] >= cast(concat(substring([Results1].[PERIOD],1,4),'-10-15T00:00:00.000000000'), timestamp2)
在这两种情况下 - Cognos都不会验证表达式,或者,如果它确实验证了,我在运行报表时会遇到运行时错误。在这两种情况下,我基本上都得到了消息&#34;文字与格式字符串&#34;不匹配,即使是演员也是如此。
那么 - 如何获取参数的片段/部分,并将它们切片/切块以用作上面提到的日期比较?
答案 0 :(得分:0)
给定:YYYYMM形式的整数类型的列[PERIOD],日期/时间类型的[TRANDATE]
[TRANDATE] >= cast(cast(cast([PERIOD]/100,integer),varchar(4)) || '-' || cast(mod([PERIOD],100),varchar(2)) || '-15',date)
给定:类型字符串的列[PERIOD],格式为'YYYYMM',[TRANDATE]类型为日期/时间
[TRANDATE] >= cast(substring([PERIOD],1,4) || '-' || substring([PERIOD],5,2) || '-15',date)
诀窍是您不必构建完整的日期/时间字符串。您只需要构建一个格式为'YYYY-MM-DD'的字符串,以便转换为日期类型。