在Cognos 10.2.1中 - 如何使用输入参数的子字符串部分来创建用于日期比较的表达式?

时间:2015-12-01 21:27:01

标签: cognos-10

在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;不匹配,即使是演员也是如此。

那么 - 如何获取参数的片段/部分,并将它们切片/切块以用作上面提到的日期比较?

1 个答案:

答案 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'的字符串,以便转换为日期类型。

相关问题