私はこれと同じ問題を抱えており、これを行う方法を示し、任意の曜日を柔軟に使用できるようにするために、次の例を作成しました。SELECT
これが何をしているのかを示すために、ステートメントにはさまざまな行があります[Results]
が、答えを得るにはその行が必要です。また、何を変更する必要があるかを簡単に確認できるように、現在の日付と目標の曜日の変数を使用しました。
最後に、可能な例として現在の日付を含めたい場合、または常に前の週に戻りたい場合の結果の例があります。
DECLARE @GetDate AS DATETIME = GETDATE();
DECLARE @Target INT = 6 -- 6 = Friday
SELECT
@GetDate AS [Current Date] ,
DATEPART(dw, @GetDate) AS [Current Day of Week],
@Target AS [Target Day of Week] ,
IIF(@Target = DATEPART(dw, @GetDate), 'Yes' , 'No') AS [IsMatch] ,
IIF(@Target = DATEPART(dw, @GetDate), 0 , ((7 + @Target - DATEPART(dw, @GetDate)) % 7) - 7) AS [DateAdjust] ,
------------------------------------------------------------------------------------------------------------------------------------------------
CAST(IIF(@Target = DATEPART(dw, @GetDate), @GetDate, DATEADD(d, (((7 + @Target - DATEPART(dw, @GetDate)) % 7) - 7), @GetDate)) AS DATE) AS [Result]
------------------------------------------------------------------------------------------------------------------------------------------------
;
SELECT
@GetDate AS [Current Date] ,
DATEPART(dw, @GetDate) AS [Current Day of Week],
@Target AS [Target Day of Week] ,
((7 + @Target - DATEPART(dw, @GetDate)) % 7) - 7 AS [DateAdjust] ,
------------------------------------------------------------------------------------------------------------------------------------------------
CAST(DATEADD(d, (((7 + @Target - DATEPART(dw, @GetDate)) % 7) - 7), @GetDate) AS DATE) AS [NOTIncludeCurrent]
------------------------------------------------------------------------------------------------------------------------------------------------
;