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

T-SQL で日付範囲の結果セットを効率的に生成するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-11 20:16:48
オリジナル
230 人が閲覧しました

How Can I Efficiently Generate a Date Range Resultset in T-SQL?

T-SQL での日付系列の生成

この記事では、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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート