指定された範囲内の日付シーケンスを生成します
質問:
指定された範囲内のすべての日付を効率的に取得してカーソルに保存するにはどうすればよいですか?
解決策:
日付テーブルを使用する
日付テーブルは、日付を取得するためのシンプルかつ直接的な方法を提供します。利用可能な場合は、次のようなクエリを使用します:
<code class="language-sql">DECLARE @MinDate DATE = '20140101', @MaxDate DATE = '20140106'; SELECT Date FROM dbo.Calendar WHERE Date >= @MinDate AND Date < @MaxDate;</code>
シーケンスを動的に生成する
日付テーブルがない場合は、次のクエリを使用して日付シーケンスを生成できます:
<code class="language-sql">DECLARE @MinDate DATE = '20140101', @MaxDate DATE = '20140106'; SELECT TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1) Date = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate) FROM sys.all_objects a CROSS JOIN sys.all_objects b;</code>
カーソルの使用を避ける
パフォーマンスを向上させるには、カーソルの代わりにコレクションベースの代替手段を使用することを検討してください。たとえば、特定の品目と日付の数量を取得するには:
<code class="language-sql">DECLARE @ToDate DATE = '20140428'; SELECT TOP 1 date, it_cd, qty FROM T WHERE it_cd = 'i-1' AND Date <= @ToDate ORDER BY Date DESC;</code>
以上が指定された範囲内の一連の日付を効率的に生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。