2014-02-28 37 views
0

任何人都有任何想法如何選擇月份和年份之間的數據組合。這是我的代碼。在SQL中的月份和年份組合之間進行記錄

DECLARE @StartYear int 
DECLARE @EndYear int 
DECLARE @StartMonth int 
DECLARE @EndMonth int 

SET @StartYear = DATEPART(Year,'01-01-1753') 
SET @StartMonth = DATEPART(Month,'01-01-1753') 
SET @EndYear = DATEPART(YEAR,DATEADD(month,-1,GETDATE())) 
SET @EndMonth = DATEPART(MONTH,DATEADD(month,-1,GETDATE())) 


SELECT station_id, 
     DATEPART(YEAR,date_time) AS YEAR, 
     DATEPART(MONTH,date_time) AS MONTH, 
     CONVERT(date,date_time) AS DATE, 
     DATENAME(weekday,date_time) AS weekday, 
     sum(volume) AS Total_volume 
    FROM rvtcs_data_aggregated_hourly 
    WHERE DATEPART(MONTH,date_time) > @StartMonth AND DATEPART(YEAR,date_time)= @StartYear 
    AND DATEPART(MONTH,date_time) <= @EndMonth AND DATEPART(YEAR,date_time)= @EndYear 
    GROUP BY station_id, 
     CONVERT(date,date_time), 
     DATEPART(MONTH,date_time), 
     DATEPART(YEAR,date_time), 
     DATENAME(weekday,date_time) 

我已經試過這樣的事情,但是,即使有數據

+2

http://stackoverflow.com/a/7917452/1477051僅一個月間[SQL Server 2008中選擇數據的 –

+0

可能重複和年](http://stackoverflow.com/questions/7917235/sql-server-2008-select-data-only-between-month-and-year) –

+0

你想通過GROUPING BY來實現這麼多領域?請詳細說明。 –

回答

0

我看了2個鏈接這裏下面,我personnaly喜歡的數字它沒有返回日期:

where datepart(year, date_time) * 100 + datepart(month, date_time) 
between @startyear *100 + @startmonth 
and @endyear *100 + @endmonth 
1

使用功能計算年 - 月的第一天(對於結束日期,增加一個月),然後使用>=<針對date_time列:

WHERE date_time >= DATEADD(year, 
          @StartYear-2000, 
          DATEADD(month, @StartMonth-1, '20000101')) 
    AND date_time < DATEADD(year, 
          @EndYear-2000, 
          DATEADD(month, [email protected], '20000101')) 
0

如果你有一個開始日期和一個結束日期,並且你希望選擇這些日期之間的所有記錄,包括這些日期的月份和年份相同的記錄,那麼我認爲你不需要提取年份和月份部分明確,而嘗試以下操作:

獲取@EndDate下個月的第一天,由下面的表達式與@EndDate更換GETDATE()

DATEADD(mm,1,CONVERT(VARCHAR(25),DATEADD(dd,-DAY(GETDATE())+1, GETDATE()),101)) 

獲取月份的第一天@StartDate在下面的表達中用@StartDate代替GETDATE()離子:

CONVERT(VARCHAR(25),DATEADD(dd,-DAY(GETDATE())+1, GETDATE()),101) 

WHERE條件下使用這兩個表達式如下

... 
WHERE your_date_field >= CONVERT(VARCHAR(25),DATEADD(dd,-DAY(@StartDate)+1, @StartDate),101) 
    AND your_date_field < DATEADD(mm,1,CONVERT(VARCHAR(25),DATEADD(dd,-DAY(GETDATE())+1, GETDATE()),101))