2009-07-19 33 views
2

私は現在、今週と先週の値の2/13/2009形式のvbscript機能を使用しています。私はSQLクエリで可能かどうか疑問に思っていました。最初の日今週と先週

+1

あなたは週の最初の日として何を考えていますか?ある人は日曜日に、ある人は月曜日に言います(そして他の人たちは別のことを言うかもしれません)。 SQL Server上のすべてのアプリケーションに同じ回答があるわけではないので、SELECT @@ DATEFIRSTでチェックしたり、SET DATEFIRSTを使用してチェックしたりすることができます。 – RBarryYoung

答えて

7

これらのステートメントは、TSQLで必要な処理を行う必要があります。ステートメントは現在の日付に基づいています。

Select dateadd(wk, datediff(wk, 0, getdate()) - 1, 0) as LastWeekStart 
Select dateadd(wk, datediff(wk, 0, getdate()), 0) as ThisWeekStart 
Select dateadd(wk, datediff(wk, 0, getdate()) + 1, 0) as NextWeekStart 

は、他のdate routines hereがたくさんあります:あなたは、あなたが望むものは何でも日付のGETDATE()を置き換えることができます。

+2

ニースアンサー、ベン。読者は、SET DATEFIRST(およびSELECT @@ DATEFIRST)で定義されているように、これらの週の最初の日を返します。これは、読者が期待するものと同じでも異なっていてもかまいません。 – RBarryYoung

+0

@Rバリー・ヤング - 非常に良い点。これを電話していただきありがとうございます。 –

+0

Georgeさんが以下に述べたように、あなたの日付のdatepart値がDateFirst値と同じ場合、答えは間違っています。 Benの答えは、今日の日付部分がDateFirst値と等しい場合にのみ有効です。先週の日曜日の日付を使用して別の例: SET DATEFIRST 1 SELECT \t DATEADD(DAY、1 - DATEPART(WEEKDAY、'11/2015分の29 ')、'11/2015分の29')CorrectThisWeekStart AS、 \t \t DATENAME(WEEKDAY 、'11/2015/29 ') SET DATEFIRST 7 SELECT \t DATEADD(DAY、1 - DATEPART(平日/ 29/2015 '11')、'11/2015'/29)CorrectThisWeekStart AS、 \t \t DATENAME(WEEKDAY、'11/29/2015 ') – SQLGuyChuck

2

今日の日曜日はベンの答えが間違っています。週の最初の日が日曜日か月曜日かにかかわらず、現在の日付は現在の週に含める必要があります。 2013年3月24日にコードを実行すると、2013年3月25日のThisWeekStartが表示されます。 SELECT DATEADD(DAY、1 - DATEPART(DW、 '3/24/2013')、 '3/24/2013')

+4

これを彼の答えにコメントとして追加するか、追加の答えの拡張ではなく完全な答えを含めます。あなたの答えは孤立して立つべきです。私はあなたが話していることを知るために "ベンの答え"を見なければなりません。 –

関連する問題