MIKO_ZZと申します。
下記のようなテストを行うと取得できるとは思います。
でも、自分で書いていても大変分かりにくいSQLです。
期間管理のテーブルを見直すか、ストアドファンクション
等を使って期間を取得できるようにした方が使いやすいと思います。
※.下記SQLのコメントにも記載してありますがまだ完璧ではありません 12月の場合 0と出力されてしまいます。これ以上DECODE等を使って変換を書くと長くなりそうなので省略しました。まぁ参考になれば幸いです。
--------------------------------------------------
CREATE TABLE TEST_20041118
( DATA_ID INT PRIMARY KEY,
ST_MONTH INT,
SPAN INT )
/
INSERT INTO TEST_20041118
VALUES ( 1, 2, 4 )
/
SELECT
-- ここから開始月( 12月は 0となります)
MOD(
TRUNC(
DECODE(TRUNC(((100+TO_NUMBER(TO_CHAR(SYSDATE,'MM')))-ST_MONTH)/100),
1,TO_NUMBER(TO_CHAR(SYSDATE,'MM'))-ST_MONTH,
0,TO_NUMBER(TO_CHAR(SYSDATE,'MM'))-ST_MONTH+12)
/ (12/SPAN) )
* (12/SPAN)+ST_MONTH
,12) 開始月,
-- ここから終了月( 12月は 0となります)
MOD(
TRUNC(
DECODE(TRUNC(((100+TO_NUMBER(TO_CHAR(SYSDATE,'MM')))-ST_MONTH)/100),
1,TO_NUMBER(TO_CHAR(SYSDATE,'MM'))-ST_MONTH,
0,TO_NUMBER(TO_CHAR(SYSDATE,'MM'))-ST_MONTH+12)
/ (12/SPAN) )
* (12/SPAN)+ST_MONTH+(12/SPAN)-1
,12) 終了月
FROM TEST_20041118 ;
--------------------------------------------------
お礼
ご解答ありがとうございます。 こうなると、なんで12月の次が1月なのかと思ってしまいます。。 おっしゃるとおりに、一度、プログラムの方でループさせて1次的にテーブルを作ることにしました。 ありがとうございます。