需要根据开始日期输入获取数据

时间:2011-12-08 17:39:00

标签: sql sql-server-2008 date

我正在尝试根据开始日期输入检索数据。如果用户选择开始日期为11-27-2011且结束日期为12/04/2011,则我的数据集的返回日期将是整个11月。如果他们选择开始日期为10/01/2011,那么我的数据集将从1月1日到当前日期返回数据。

我已经设法让第二/第三个语句工作但是当我尝试添加过滤器以从1月1日检索数据时它出错(查询中的第一个IF语句)。第一个IF语句检查@BeginningDate是否小于前一个月。如果它是那么它应该检索年份数据,否则它从那里继续。这是我对日期的查询:

Declare @startdate  datetime
Declare @enddate  datetime
Declare @BeginningDate datetime

set @BeginningDate = '12-01-2011'

IF Month(@BeginningDate) < (Month(GETDATE())-1)
BEGIN
set @startdate = DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
set @enddate = dateadd(day, datediff(day, 0, getdate()), 0)
END

IF Month(@BeginningDate) = (Month(GETDATE())-1)
BEGIN
set @startdate = dateadd (mm,-1,DATEADD(dd,-(DAY(DATEADD(mm,1,convert(varchar(10),getdate(),111)))-1),DATEADD(mm,0,convert(varchar(10),getdate(),111))))--BEGINNING OF PRIOR MONTH
set @enddate =DATEADD(dd,-1,DATEADD(mm, DATEDIFF(m,0,convert(varchar(10),getdate(),111)),0))--END OF PRIOR MONTH
END

ELSE
IF Month(@BeginningDate) = (Month(GETDATE())
BEGIN
set @startdate = dateadd(month, datediff(month, 0, dateadd(day, datediff(day, 1, getdate()), 0)), 0)--BEGINNING OF CURRENT MONTH
set @enddate = dateadd(day, datediff(day, 0, getdate()), 0)--THROUGH CURRENT MONTH (TODAY)
END

正如我所说,我可以设法让查询与两个语句一起使用,但是当我在第一个IF中添加然后解析它时,我得到了这样的消息:

error message

第15行是最后一个ELSE语句中的'BEGIN'。我是否尝试过多IF / ELSE语句?在这么多日期参数以及在IF / ELSE中使用它们之前,我从来没有这么做过。

提前致谢!

2 个答案:

答案 0 :(得分:2)

看起来行IF Month(@BeginningDate) = (Month(GETDATE())缺少a)

将其更改为此

IF Month(@BeginningDate) = (Month(GETDATE())),看看它现在是否有效

答案 1 :(得分:1)

我相信你的括号是无与伦比的 - 在你的最后一个块中,试试

IF Month(@BeginningDate) = (Month(GETDATE()))

IF Month(@BeginningDate) = Month(GETDATE())

而不是最终的

IF Month(@BeginningDate) = (Month(GETDATE())