年度を考慮した日付を取得

:年度に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
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。