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 to 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

ただし、実際のソリューションでは、年または四半期を具体的に定義したくありません。年と四半期を最新にしたい。

1年間、私はこれをやろうとしました:

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)

それもうまくいきませんでした。年間または四半期のどちらを行うかについて迷っています。アドバイスをいただければ幸いです。

4

2 に答える 2

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 などが含まれます。

于 2012-06-08T14:56:29.543 に答える
1

現在の年が必要ですか?

  DateTime.Today.Year
于 2012-06-08T14:52:42.817 に答える