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

Sql server 2008 如何在Cognos中获取特定日期范围之间的报告,sql-server-2008,datetime,timestamp,cognos,cognos-8,Sql Server 2008,Datetime,Timestamp,Cognos,Cognos 8,我最近开始在CognosReportStudio上工作。有一个带有4个表联接的T-sql代码。我只是通过将SQL工具箱拖动到查询资源管理器,将代码粘贴到CognosReportStudio中。报告确实成功运行。但现在我希望这份报告在每个月的1号生成,到期日在该月的1号到30/31号之间。 例如:如果我在5月1日收到一份报告,它应该给出到期日范围在5月1日至5月31日之间的数据记录。 我尝试将以下代码添加到已编写的SQL代码中: WHERE CURR_MATURITY_DATE BETWEEN

我最近开始在CognosReportStudio上工作。有一个带有4个表联接的T-sql代码。我只是通过将SQL工具箱拖动到查询资源管理器,将代码粘贴到CognosReportStudio中。报告确实成功运行。但现在我希望这份报告在每个月的1号生成,到期日在该月的1号到30/31号之间。 例如:如果我在5月1日收到一份报告,它应该给出到期日范围在5月1日至5月31日之间的数据记录。 我尝试将以下代码添加到已编写的SQL代码中:

WHERE 
CURR_MATURITY_DATE BETWEEN (DATEADD(MM, 0, GETDATE()), 0) AND (DATEADD(MM, 0, GETDATE()) +1, 0) -1)
这个代码不起作用。
Pl注:当前到期日列格式为:mm/dd/yyyy。请告知代码中需要进行哪些更改才能成功运行

在WHERE子句中尝试以下内容:

对于每月的第一天:
选择DATEADD(mm,DATEDIFF(mm,0,getdate()),0)

对于月的最后一天:
选择dateadd(ms,-3,dateadd(mm,DATEDIFF(m,0,getdate())+1,0))


找到它,它解释了一切。

Cognos有一个添加月份功能。(至少Cognos 10是这样做的。)在表达式编辑器中的“函数”选项卡上,它位于“业务日期/时间函数”下。这叫"加"月。因此,您的函数最终将类似于(\u add\u months(1,current\u 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)

我在SQL代码CURR\u-MATUR\DT中尝试了((DATEADD({MM},0,current\u-date),0)和(DATEADD({MM},0,current\u-date)+1,0)-1)之间的语法,但不起作用,我不知道为什么它仍然给我这个错误。其中CURR_MATUR_DT介于((DATEADD({MONTH},DATEDIFF({MONTH},0,GETDATE()),0))和(DATEADD({MONTH},DATEDIFF({MONTH},0,GETDATE())+1,0)-1)之间错误:执行操作“sqlPrepareWithOptions”状态=“-9”时发生错误,实际错误是什么?您可能必须单击“详细信息”。您是否建议使用Getdate的转换函数,因为Curr_到期列以mm/dd/yyyy格式返回日期?这不重要,只要该列是日期列。