Db2 在Cognos中,添加过滤器以提取时间戳介于昨天凌晨4点和今天凌晨3点之间的行

Db2 在Cognos中,添加过滤器以提取时间戳介于昨天凌晨4点和今天凌晨3点之间的行,db2,cognos,cognos-10,Db2,Cognos,Cognos 10,我是Cognos新手,我正在尝试向一个列添加一个过滤器,该过滤器只允许昨天凌晨4点到今天凌晨3点之间的行。我在db2中有一个工作查询,但是当我尝试将它添加到Cognos中的过滤器时,我得到了一个解析错误。此外,我在属性中发现,我试图筛选的列的数据类型为未知(不受支持)类型。我首先为每个试图限制数据的时间帧创建两个数据项表达式。但我在第一个上发现了一个解析错误: [Presentation Layer].[Cr dtime]=timestamp(current date) - 1 day + 4

我是Cognos新手,我正在尝试向一个列添加一个过滤器,该过滤器只允许昨天凌晨4点到今天凌晨3点之间的行。我在db2中有一个工作查询,但是当我尝试将它添加到Cognos中的过滤器时,我得到了一个解析错误。此外,我在属性中发现,我试图筛选的列的数据类型为未知(不受支持)类型。我首先为每个试图限制数据的时间帧创建两个数据项表达式。但我在第一个上发现了一个解析错误:

[Presentation Layer].[Cr dtime]=timestamp(current date) - 1 day + 4 hour
这可以在我的db2本地测试数据库中工作,但甚至不能在Cognos中编译。我还尝试将该列转换为时间戳,但这也不起作用。感谢您的帮助。我还尝试使用_add_days函数,但仍然出现解析错误。同时对列进行采样,我得到的值似乎是时间戳,如下字符串所示:2016-01-02T11:11:45.000000000

最终,如果两个过滤器正常工作,我希望原始过滤器接近以下语法:

[表示层].[Cr dtime]介于[昨天凌晨4点]和[今天凌晨3点]

这是您的筛选器:

[Presentation Layer].[Cr dtime] between
cast(_add_hours(_add_days(current_date,-1),4),timestamp) 
and 
cast(_add_hours(current_date,3),timestamp)

这是因为Cognos中的当前_日期没有时间组件。如果将其直接转换为时间戳类型,则会看到日期的时间部分为12:00:00.000 AM或午夜。知道了这一点,我们可以简单地在午夜后添加所需的时间,转换为时间戳类型,并在过滤器中使用它。

您的第一步应该是找出为什么它在FM中以未知类型返回。DB2中的数据类型是什么?我不是DB2专家,但这是一个非常有趣的时间戳。我不认为DB2有ISO时间戳(我想这就是您所拥有的)。如果这是char/varchar字段,则必须用单个空格替换T。