2016-10-31 9 views
-1

週の開始と週末のタイムスタンプを取得するために、私は次のことを行います。週の開始と週末のタイムスタンプを取得

 

    SET @currentTimestamp = DATEDIFF(s, '1970-01-01 00:00:00', GETUTCDATE()); 
    SET @currentDate = DATEADD(s, @currentTimestamp, '19700101'); 
    SET @currentWeek = DATEPART(wk, @currentDate); 
    SET @starter = 1451654325; 
    SET @weekSize = 604800; 
    SET @beginOfWeek = @starter + ((@weekSize) * (@currentWeek - 2)); 
    SET @endOfWeek = @starter + ((@weekSize) * (@currentWeek - 1)); 

それは...のようなクエリの将来のために現在の週の一部として何かをするために

 

    Submit_Date BETWEEN @beginOfWeek AND @endOfWeek 

必要があります。

コードをよりエレガントで美しくできますか?

+2

http://stackoverflow.com/questions/12422248/previous-monday-previous-sundays-date-based -on-todays-date –

+0

これはおそらくhttp://codereview.stackexchange.comに適しています – Brandon

答えて

0

あなたはBETWEEEN状態で直接このサブクエリの結果を使用することができます。

ここ
SELECT LastSunday, DATEADD(dd, -7, LastSunday) AS SundayBeforeThat 
FROM (SELECT CAST(GETUTCDATE() - DATEPART(dw, GETUTCDATE()) + 1 AS DATE) AS LastSunday) A 
  • 我々は時間の部分を切り捨てるCAST(... AS DATE)を使用します。
  • 最後の日曜日にはDATEPART(dw, GETUTCDATE()) + 1を得る。
  • DATEADD(dd, -7, LastSunday)負の数で1週間前に戻る。

実は、私は希望おそらくINNER JOINこのサブクエリON Submit_Date < LastSunday AND Submit_Date >= SundayBeforeThatフィルタリングするためのターゲットクエリ:

... 
INNER JOIN (
     SELECT CAST(GETUTCDATE() - DATEPART(dw, GETUTCDATE()) + 1 AS DATE) AS LastSunday 
    ) w 
ON Submit_Date >= DATEADD(dd, -7, w.LastSunday) 
AND Submit_Date < w.LastSunday 
関連する問題