Cognos Report Studio ver 10中的当前月份和年份自动过滤器



我有一个查询项,它按日期列过滤记录,格式为'YYYYMM '。到目前为止,我已经硬编码了Detail filters中的[DateCol] = '201406'值,以获得当前的月份和年份记录。但我想动态地改变这个值。下个月,它应该在"201407"之前过滤记录。我该如何做到这一点?我试着在Detail filters:

中拖动[DateCol]
[DateCol] = extract(year, current_date) + extract(month, current_date)

但是它返回了一个错误:

UDA-SQL-0460 The operation "equal" is invalid for the following combination of data types: Character and Integer

请指导

另一个公式

[DateCol] = cast(extract(year, current_date) * 100 + extract(month, current_date) as varchar(6))

最简单的解决方案是创建我所说的"月键",它是年份和月份的整数表示。然后可以将其转换为char进行比较。其实很简单:

extract(year, current_date) * 100 + extract(month, current_date)

任何数字乘以100的结果是在最后加两个0。今年是2014年,所以2014乘以100等于201400。然后,您可以自由地添加月份以获得"月键"。201400 + 6 = 201406。然后可以将该整数转换为字符并进行比较。最终的过滤器表达式变成:

[DateCol] = cast(extract(year, current_date) * 100 + extract(month, current_date), char(6))

注意:为日期制作整数"键"的技术也可以扩展到天,并且有许多应用,即排序。下面的表达式将为您提供一个整数'day key',它保留了原始日期的数字顺序和层次结构:

extract(year, current_date) * 10000 + extract(month, current_date) * 100 + extract(day, current_date)

有两个问题。DateCol的数据类型是字符。提取函数返回整数。其次,你没有正确地用你的摘录构建YYYYMM。你的方法是提取年份作为一个数字,然后加上月份。你最终得到的结果是"201406"= 2020,这是行不通的。因此,您需要强制转换两个摘录并将它们连接起来:

[DateCol] = cast(extract(year, current_date) as varchar(4) 

+ cast (extract(month, current_date) as varchar(2))

编辑:实际上,它可能比这更复杂。Extract不会返回6月份的06,只返回6。因此,您需要确定该摘录是一个字符还是两个字符。如果它是1,你需要在转换它之后在前面加一个"0"。确切的语法将取决于您的数据库,但是像这样:

[DateCol] = cast(extract(year, current_date) as varchar(4)
+ case when cast (extract(month, current_date) as varchar(2) = 1
    then '0' + cast (extract(month, current_date) as varchar(2)
  else cast (extract(month, current_date) as varchar(2)
end

相关内容

  • 没有找到相关文章

最新更新