日付生成のための複数の日付範囲の処理
2 つの日付間の日付の生成は、さまざまなプログラミング シナリオでよく発生します。単一の範囲の日付を生成するのは簡単ですが、この機能を拡張して複数の範囲を処理するには課題が生じる可能性があります。
各行が日付範囲を表す次の表を考えてみましょう。
ID | START_DATE | END_DATE |
---|---|---|
101 | April 1, 2013 | April 10, 2013 |
102 | May 10, 2013 | May 12, 2013 |
期待される値出力は各範囲内の個別の日付を生成する必要があります:
ID | Dates |
---|---|
101 | April 1, 2013 |
101 | April 2, 2013 |
... | ... |
101 | April 10, 2013 |
102 | May 10, 2013 |
102 | May 11, 2013 |
102 | May 12, 2013 |
Oracle はこれを実現するための独創的なソリューションを提供しています。 result:
select A.ID, A.START_DATE + (delta - 1) dt from t_dates A, ( select level-1 as delta from dual connect by level-1 <= ( select max(end_date - start_date) from t_dates ) ) where A.START_DATE + (delta - 1) <= A.end_date order by 1, 2;
デルタ列は、Oracle の CONNECT BY 階層を使用して、1 からテーブル内の終了日と開始日の最大の差までの一連の整数を生成します。 A.START_DATE (デルタ - 1) 式は、結果内の各レコードの適切なデルタだけ開始日を増分します。 WHERE 句は、現在の日付範囲の終了日を超える結果を除外します。
Oracle で複数の範囲にわたる日付を生成するためのこの洗練されたソリューションをお楽しみください!
以上がOracle で複数の日付範囲にわたる日付を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。