:年度に2010とかの年度を設定し、:年度開始月には4などの月を設定する。
SELECT
TO_DATE(:年度 + SIGN(GREATEST(:年度開始月 - TO_CHAR(T1.年月, 'MM'), 0)) || TO_CHAR(T1.年月, 'MM'), 'YYYYMM')
FROM (
SELECT TO_DATE('2000/01/01') "年月" FROM DUAL UNION ALL
SELECT TO_DATE('2000/02/01') "年月" FROM DUAL UNION ALL
SELECT TO_DATE('2000/03/01') "年月" FROM DUAL UNION ALL
SELECT TO_DATE('2000/04/01') "年月" FROM DUAL UNION ALL
SELECT TO_DATE('2000/05/01') "年月" FROM DUAL UNION ALL
SELECT TO_DATE('2000/06/01') "年月" FROM DUAL UNION ALL
SELECT TO_DATE('2000/07/01') "年月" FROM DUAL UNION ALL
SELECT TO_DATE('2000/08/01') "年月" FROM DUAL UNION ALL
SELECT TO_DATE('2000/09/01') "年月" FROM DUAL UNION ALL
SELECT TO_DATE('2000/10/01') "年月" FROM DUAL UNION ALL
SELECT TO_DATE('2000/11/01') "年月" FROM DUAL UNION ALL
SELECT TO_DATE('2000/12/01') "年月" FROM DUAL) T1
結果は以下の通り。
2011/01/01
2011/02/01
2011/03/01
2010/04/01
2010/05/01
2010/06/01
2010/07/01
2010/08/01
2010/09/01
2010/10/01
2010/11/01
2010/12/01
1,2,3月までは次の年になる。
SIGN(GREATEST(x,0))でプラスは1、ゼロとマイナスは0が返るようにしている。
それを元に数値と
文字列の自動キャストに頼りながら計算すればよし。
最終更新:2011年08月23日 18:00