SQL Server 内での日付範囲の生成
多くの場合、データベース管理者はテーブルに日付範囲を設定する必要があります。 この記事では、これを実現するための効率的な SQL Server の方法を示します。
一般的な手法の 1 つは、ROW_NUMBER()
サブクエリを使用して数値シーケンスを生成することです。
<code class="language-sql">DECLARE @StartDate DATE = '20110901'; DECLARE @EndDate DATE = '20111001'; SELECT DATEADD(DAY, nbr - 1, @StartDate) FROM ( SELECT ROW_NUMBER() OVER (ORDER BY c.object_id) AS nbr FROM sys.columns c ) nbrs WHERE nbr - 1 <= DATEDIFF(DAY, @StartDate, @EndDate);</code>
このサブクエリは一連の数値を作成し、DATEADD()
開始日を数値ごとに増分して日付範囲を生成します。
よりパフォーマンスの高い代替方法では、既存の集計テーブル (利用可能な場合) を利用します。
<code class="language-sql">SELECT DATEADD(DAY, nbr, @StartDate) FROM nbrs WHERE nbr <= DATEDIFF(DAY, @StartDate, @EndDate);</code>
これにより、再帰的なクエリが回避され、大きな日付範囲を処理する際に速度が大幅に向上します。 集計テーブルには事前に生成された一連の数値が含まれているため、その場で数値を生成する必要がなくなります。
以上がSQL Server で日付範囲を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。