- ベストアンサー
日付範囲を展開したレコードを作成する方法
- Oracleでストアドパッケージを作成している場合、与えられた日付範囲を展開してレコードを作成したい場合、ストアド内で実装することが可能です。
- 与えられたデータから、日付の範囲を展開して新しいレコード群を作成したい場合、ストアドを使用することが一般的です。
- Typeは使用できないため、展開後のレコードは別途SQLで利用する必要があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Oracleのバージョンが書いていないのですが、10g以降であればmodel句を使って、こんな感じでどうでしょうか。 SDATE、EDATEのデータ型が不明なのでDate型と言う前提です。 --この部分はテーブルを作るのが面倒なので疑似データを用意しているだけです with tableA as ( select 1 KEY1, 1 KEY2, 1 KEY3, date '2012-07-12' SDATE, date '2012-09-11' EDATE from DUAL union all select 2 KEY1, 2 KEY2, 2 KEY3, date '2012-06-01' SDATE, date '2012-07-31' EDATE from DUAL ) --実際のSQLはここから select key1,key2,key3,to_char(dt, 'yyyy/mm/dd') dt from tableA model partition by (KEY1,KEY2,KEY3) dimension by (0 as IND) measures(trunc(SDATE, 'mm') as DT, months_between(trunc(EDATE,'mm'), trunc(SDATE,'mm')) as TERM) rules(DT[for IND from 0 to TERM[0] increment 1] = add_months(DT[0], cv(IND)));
その他の回答 (1)
- hogya
- ベストアンサー率67% (49/73)
Oracle 11g R1以降であれば、Pivot(UnPivot)を駆使すれば実現できると思います。
お礼
ありがとうございます。 Pivotを調べてみましたが、どうも駆使の仕方が難しそうなので諦めました・・・。
お礼
ありがとうございます。 試して見たところ、思うようなことができそうでした。 ちょっと意味がわからないので、調べながら応用きかせつつ実装してみようかと思います。