この記事では、T-SQL を使用して、指定された範囲内の日付のシーケンスを含む結果セットを作成する効率的な手法を説明します。 最適化されたアプローチに焦点を当てて、この日付シリーズを生成する方法を検討します。
開始日と終了日を設定しましょう:
<code class="language-sql">DECLARE @StartDate datetime = 'Mar 1 2009', @EndDate datetime = 'Aug 1 2009'</code>
単純ですが効率は低い方法では、WHILE
ループを利用します。
<code class="language-sql">DECLARE @currentDate datetime SET @currentDate = @StartDate WHILE @currentDate <= @EndDate BEGIN SELECT @currentDate SET @currentDate = DATEADD(day, 1, @currentDate) END</code>
この反復的なアプローチは機能しますが、日付範囲が大きい場合は時間がかかる可能性があります。
spt_values
を使用した最適化されたアプローチ (SQL Server 2005 以降)特に日付範囲が広い場合のパフォーマンスを向上させるには、spt_values
システム テーブル (SQL Server 2005 以降のバージョンで利用可能) を利用します。
<code class="language-sql">DECLARE @StartDate datetime, @EndDate datetime; SET @StartDate = GETDATE(); SET @EndDate = DATEADD(day, 100, @StartDate); SELECT DATEADD(day, number, @StartDate) AS DateValue FROM master..spt_values WHERE type = 'P' AND DATEADD(day, number, @StartDate) <= @EndDate;</code>
このクエリは、spt_values
から開始日までの連続番号を追加し、指定された範囲内の日付のみを含むようにフィルター処理することで、日付系列を効率的に生成します。この方法は、大規模なデータセットに対するループベースのアプローチよりも大幅に高速です。 master..spt_values
テーブルは、すぐに利用できる一連の数値を提供するため、このタスクに最適です。
以上がT-SQL で日付範囲の結果セットを効率的に生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。