ホームページ >データベース >mysql チュートリアル >T-SQL で一連の日付を効率的に生成するにはどうすればよいですか?

T-SQL で一連の日付を効率的に生成するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-11 20:08:43666ブラウズ

How to Efficiently Generate a Sequence of Dates in T-SQL?

T-SQL で増分日付結果セットを生成します

SQL Server で、指定された開始日と終了日の間の日付セットを生成するには、効率的で最適化されたソリューションが必要です。一般的なアプローチは、WHILE ループを使用して、終了日に達するまで開始日に日を段階的に追加することです。

ただし、日付範囲が 2047 日以内の場合は、別の方法を使用できます。次の T-SQL クエリは spt_values システム テーブルを使用します:

<code class="language-sql">declare @dt datetime, @dtEnd datetime
set @dt = getdate()
set @dtEnd = dateadd(day, 100, @dt)

select dateadd(day, number, @dt)
from (select number from master.dbo.spt_values
where [type] = 'P'
) n
where dateadd(day, number, @dt) < @dtEnd</code>

このクエリは、0 ~ 2047 の数値範囲を含む spt_values テーブルを利用します。 「P」タイプをフィルタリングすると、連続した数値のセットが得られます。 dateadd 関数を使用して各数値が開始日付に追加され、事実上、増加する日付の結果セットが生成されます。

この方法には次の利点があります:

  • シンプルさ: ループや複雑な計算は必要ありません。
  • 効率: クエリはシステム テーブルを使用し、ユーザー定義テーブルに関連するオーバーヘッドを回避します。
  • スケーラビリティ: 2047 日の制限内でより大きな日付範囲を処理できます。

SQL Server 2008 以降の場合、この方法は、T-SQL で増加する日付セットを生成するための効率的で簡単なソリューションを提供します。

以上がT-SQL で一連の日付を効率的に生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。