2012-04-27 14 views
7

今週の記録を見たいのは、現在の日付を宣言するだけです。 例:現在の日付で週の日付範囲をsqlで検索しますか?

 select datename(dw,getdate()) -- Example today is Friday "27-04-2012" 

ので、私は得ることができますどのように日付範囲

 start on monday "23-04-2012" or sunday "22-04-2012" As @dateStart to 

    end on sunday "29-04-2012" or saturday "28-04-2012" As @dateEnd 

、私は

 select * from table where date>[email protected] AND date<[email protected] 
+0

現在の曜日をテストし、日付に関連する日数を減算または追加する必要があります。 – BugFinder

答えて

13

は、各曜日を取得するためにいくつかの有用なコマンド

あなたは、日付の範囲を得るためにあなたのクエリでこれらを使用することになり
SELECT 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), -2) SatOfPreviousWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), -1) SunOfCurrentWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 0) MondayOfCurrentWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 1) TuesOfCurrentWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 2) WedOfCurrentWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 3) ThursOfCurrentWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 4) FriOfCurrentWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 5) SatOfCurrentWeek 

です:

SELECT * 
FROM yourTable 
WHERE yourDate >= DATEADD(wk, DATEDIFF(wk,0,GETDATE()), -1) -- Sunday 
AND yourDate <= DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 5) -- Saturday 
4

だからあなたは今週からレコードだけを望んでクエリを選択することができますか?ここで

SELECT t.* 
FROM table t 
WHERE t.date >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE())/7 * 7, 0) 
AND t.date <= DATEADD(DAY, DATEDIFF(DAY, -1, GETDATE()), 0) 
1

クエリこと他の人はうまくいくかもしれないと示唆していますが、あなたには「週」が何であるかを定義していません。国/地域およびビジネス上の理由によって、週は日曜日、月曜日、月曜日などとなります。

したがって、最初と最後の曜日を見つける最も良い解決策はおそらくcalendar tableですあなたが必要とするすべての日付の週の最初と最後の曜日を事前に入力します。次に、あなたのクエリに使用する正しい開始日と終了日を取得するために、単純なクエリを使用することができます。

select @StartDate = FirstDayOfWeek, @EndDate = LastDayOfWeek 
from dbo.Calendar 
where BaseDate = @SomeDate 

このソリューションはまた、あなたが簡単に新しい列を追加することにより、週の異なる定義で作業できるという利点を有しますあなたのカレンダーテーブル。

関連する問題