12

今週までにレコードを見つけたいのですが、現在の日付を宣言するだけです。例:

     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>=@dateStart  AND date<=@dateEnd
4

3 に答える 3

17

曜日を取得するのに役立つコマンドを次に示します。

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
于 2012-04-27T11:11:26.120 に答える
5

今週のレコードだけが必要ですか?

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)
于 2012-04-27T10:58:02.480 に答える
1

他の人が提案したクエリは機能するかもしれませんが、あなたは「週」があなたにとって何であるかを定義していません。国/地域およびビジネス上の理由に応じて、1週間は日曜〜土曜、月曜〜日曜、月曜〜金曜などになります。

したがって、週の最初と最後の日を見つけるための最良の解決策は、おそらく、必要なすべての日付の週の最初と最後の日を事前に入力するカレンダーテーブルです。次に、簡単なクエリを使用して、クエリで使用する正しい開始日と終了日を取得できます。

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

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

于 2012-04-27T13:40:55.320 に答える