如何在Cognos中的特定日期范围之间获取报告

时间:2014-04-30 18:48:00

标签: sql-server-2008 datetime timestamp cognos cognos-8

我最近开始研究Cognos Report Studio。有一个带有4个表连接的T-sql代码。我只是通过将SQL工具箱拖到Query Explorer来将代码粘贴到Cognos Report Studio中。该报告确实成功运行。但是现在我希望每月1日生成的这份报告的成熟日期在该月的1日至30日/ 31日之间。 例如:如果我在5月1日收到报告,它应该提供数据的记录,其中到期日期范围在1月5日到31日之间。 我尝试将以下代码添加到我已编写的SQL代码中:

WHERE 
CURR_MATURITY_DATE BETWEEN (DATEADD(MM, 0, GETDATE()), 0) AND (DATEADD(MM, 0, GETDATE()) +1, 0) -1)

此代码不起作用。 Pl注意:列CURR_MATURITY_DATE的格式为:mm / dd / yyyy。请告知代码中需要进行哪些更改才能成功运行。

2 个答案:

答案 0 :(得分:1)

在WHERE子句中尝试这些:

每月的第一天:select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)

本月最后一天:select dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate() )+1, 0))

找到它here,它解释了所有。

答案 1 :(得分:1)

Cognos具有添加月份功能。 (至少,Cognos 10可以。)在表达式编辑器的“功能”选项卡上,它位于“业务日期/时间函数”下。它被称为_add_months。所以你的功能最终会像between (_add_months(1,current_date))

您还可以使用SQL Server功能。您必须将这些文本参数(如MM)放在大括号中。所以你最终会得到dateadd({MM},0,current_date)

对于当月的第一天,在TSQL中您将使用:DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) 在Cognos中,语法为DATEADD({MONTH}, DATEDIFF({MONTH}, 0, GETDATE()), 0)