sql >> データベース >  >> RDS >> Sqlserver

2 つの日付の間の週の開始日 (月曜日) と終了日 (日曜日) のリストを取得する方法は?

    これは、間隔が 38 年以下である限り機能します。パフォーマンスが向上し、サーバーのローカル設定に依存しません。

    この設定により、スクリプトは間違った結果を返します:

    set datefirst 1
    select * from dbo.fnGetWeeksBetweenDates('2014-03-21','2014-03-21')
      

    これは、ローカル設定が現在ニーズと競合しており、コードがそれを補っていることを意味します。

    これがスクリプトです。このスクリプトは、パフォーマンス上の理由から 38 年に制限されています (それ以上の間隔が必要になる可能性は低いと思います)。それを何年も延長するのはかなり簡単です。

    DECLARE @FromDate DATE = '2014-03-21'    
    DECLARE @ToDate DATE  = '2014-03-24'    
    
    SELECT @fromdate = dateadd(day, datediff(day, 0, @FromDate)/7*7, 0), 
    @todate = dateadd(day, datediff(day, 0, @ToDate)/7*7, 6)
    
    SELECT dateadd(d, number * 7, @fromdate) Start_Week, 
    dateadd(d, number * 7 + 6, @fromdate) End_Week
    FROM
    master..spt_values
    WHERE type = 'P' and
    @todate >= dateadd(d, number * 7, @fromdate)
      

    結果:

    Start_Week  End_Week
    2014-03-17  2014-03-23
    2014-03-24  2014-03-30
      

    1. キーと値のペアを格納するテーブルから選択するためのMySQLクエリが必要

    2. MySQL-選択時に行番号を取得

    3. null以外の列値の最初のインスタンスを検索するためのOracleSQL再帰

    4. WHERE句の参照エイリアス