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

指定された範囲内の一連の日付を効率的に生成するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-12 10:03:43
オリジナル
735 人が閲覧しました

How to Efficiently Generate a Sequence of Dates within a Given Range?

指定された範囲内の日付シーケンスを生成します

質問:

指定された範囲内のすべての日付を効率的に取得してカーソルに保存するにはどうすればよいですか?

解決策:

日付テーブルを使用する

日付テーブルは、日付を取得するためのシンプルかつ直接的な方法を提供します。利用可能な場合は、次のようなクエリを使用します:

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

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