2012-06-08 69 views
1

我有以下SQL片段:日期時間轉換的問題

WHERE YEAR(wo.audt_created_dttm) >= 2011 - 3 --narrows down to a year 
AND YEAR(wo.audt_created_dttm) >= 2006 -- bad data less than 2006 
AND wo.audt_created_dttm < DATEADD(mm, 1, CAST(CAST(1 * 3 as varchar) + '/01/' + CAST(2011 as varchar) as DateTime)) 

我翻譯成LINQ到SQL(用於LINQPad測試目的)是這樣的:

int year = 2012, quarter = 1; 
DateTime timeframe = new DateTime(year, (quarter * 3), 01).AddMonths(1); 


where wo.Audt_created_dttm.Value.Year >= year - 3 && wo.Audt_created_dttm.Value.Year >= 2006 
    && wo.Audt_created_dttm < timeframe && (s.Id =="NM" || s.Id == "TH") && 
    (wo.Clsdt_date ?? new DateTime(3000, 01, 01)) < DateTime.Now 

然而,對於實際的解決方案我不想特別定義年份或季度。我希望今年和季度是最新的。

這一年,我試着這樣做:

DateTime timeframe = new DateTime(timeframe.Year, (quarter * 3), 01).AddMonths(1); 

但是編譯器不喜歡,在所有。然後我試過這個:

DateTime setYear = new DateTime(); 
DateTime timeframe = new DateTime(setYear.Year, (quarter * 3), 01).AddMonths(1) 

也沒有工作。我不知道如何做一年或季度,並會感謝任何意見

+1

它究竟如何不起作用?它做了什麼? – svick

+0

試過你的代碼,似乎沒有編譯錯誤。 – Magnus

+0

@ svick - 如果我保留年份和季度數據類型並將它們設置爲特定年份和季度,那麼它工作得很好。但是,我不想要特定的年份或季度。我只專門設置它們,以便我可以在LINQPad中測試我的LINQ to SQL代碼,以確保我的輸出是正確的。兩個timeframe.Year和setYear.Year給了我一個「字段初始值設定程序不能引用非靜態字段,方法或屬性」等等,等等等等。我找到了答案。 –

回答

4

我想要的年份和季度是最新的。

爲了得到當前季度的第一天,你可以使用此代碼:

var now = DateTime.Now; 
var quarter = (now.Month - 1)/3; 
var timeframe = new DateTime(now.Year, 3*quarter + 1, 1); 

timeframe將包含2012-04-01,2012-07-01,2012-10-01等。取決於當前的日期。

+0

@ Martin Liversage:非常感謝您的幫助! –

1

你想今年?

DateTime.Today.Year 
+0

@ bleeeah - 感謝您的幫助。 –