2011-12-08 51 views
2

我想根據我的開始日期輸入檢索數據。如果用戶選擇11-27-2011的開始日期和2011年12月12日的結束日期,那麼我的數據集的返回日期將爲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

貌似線IF Month(@BeginningDate) = (Month(GETDATE())缺失a)

它改變這種

IF Month(@BeginningDate) = (Month(GETDATE())),看看現在的工作

+0

謝謝@jlg!似乎有時候是容易的事情! –

+0

一直髮生在我身上 – jlg

1

我相信你的括號是史無前例的 - 在你的最後一塊,嘗試

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

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

,而不是最終

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

感謝@dsolimano! –

相關問題