- ベストアンサー
現在の月を基準に、遡って24ヶ月分を表示するリストを作るには?
現在の月を基準に、遡って24ヶ月分を表示するリストを作りたいのですが、うまくいかず困っています。 TO_NUMBERではエラーが出てしまってしまいます。 SELECT TO_NUMBER(TO_CHAR(ADD_MONTHS( SYSDATE, -23),'YYYY/MM')) FROM DUAL ←× 最終的にこのような感じでExcelに表示したいと考えております。 2003/09 ←当年当月を基準に、遡って24ヶ月分を表示 2003/10 2003/11 : : 2005/05 2005/06 2005/07 2005/08 ←当年当月 この前に、当年を基準に遡って10年分を表示する年の表を作りました。 この時は、 SELECT TO_NUMBER(TO_CHAR(ADD_MONTHS( SYSDATE, 12 * -9),'YYYY')) FROM DUAL という風に、numberとして作れたので気にしなかったのですが、月の表を作る段になって困っている次第です。 よろしくお願いします。 環境:Java2SE SDK 1.4.1_05
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
うーん。 ここはjavaカテなので、 単に >2003/09 ←当年当月を基準に、遡って24ヶ月分を表示 >2003/10 >2003/11 >: >: >2005/05 >2005/06 >2005/07 >2005/08 ←当年当月 としたいだけなら Calendarを使って計算して、SimpleDateFormatを使って出力をフォーマットして表示すればいいような感じですが、 >SELECT TO_NUMBER(TO_CHAR(ADD_MONTHS( SYSDATE, -23),'YYYY/MM')) FROM DUAL ←× や >SELECT TO_NUMBER(TO_CHAR(ADD_MONTHS( SYSDATE, 12 * -9),'YYYY')) FROM DUAL という記述を見るとSQLっぽいので、もし、SQL文でしたら、対応するデータベースのSQLリファレンスを調べて、それでも分からなければデータベースの然るべきカテゴリで質問した方が、javaのカテゴリで質問するよりは良い回答が得られると思います。
その他の回答 (1)
- kazu_isoa
- ベストアンサー率48% (19/39)
質問文を見てJAVA? EXCEL? ...? と思ったのですが、 No.1の回答を見て、あ、SQLの質問か、と納得しました。←余談 回答ですが、エラーの原因と解決策を考えてみます。 (1)エラーの原因 なぜエラーになるかについては、 ・TO_NUMBER は数値に変換する関数 ・TO_CHAR は文字に変換する関数 です。前回(過去10年)うまくいったのは、 ・TO_CHAR の結果が '2005'、'2004'、・・・なので ・TO_NUMBER で数値に変換できた。 というわけです。今回(過去24ヶ月)は、 ・TO_CHAR の結果が '2005/08'、'2005/07'、・・・なので、 ・TO_NUMBER で数値に変換できない。 ということです。TO_CHAR の中身が '2005/08' のように数字以外('/')を含んでいるので、これは数値に変換できないですね。 (2)解決策 無理に数値にする必要がなければ、単純に TO_NUMBER をはずせばいいと思います。 ・TO_NUMBER(TO_CHAR(..中略..)) を ・TO_CHAR(..中略..) にするわけです。
お礼
アドバイスありがとうございます。 SELECT TO_CHAR(ADD_MONTHS( SYSDATE, -23),'YYYY/MM') FROM DUAL では、『2003/09』という値が出ていたのですが、 それをforでループして表にする時に、問題が起きたので困ってしまった次第です。 SQLのカテのような、JAVAのカテのような質問ですみませんでした。
お礼
アドバイスありがとうございます。 いびつかもしれませんが、先に作った年の表をアレンジして作りました。 SQLのカテのような、JAVAのカテのような問題ですみませんでした。