• 締切済み

PLSQLで和暦で一年前の値を求める

PLSQLで和暦で一年前の値を求めるためにadd_monthsを使いたいのですがoracle10ではうまく機能しません。 to_char(add_months(1803,-1),yymm) 1703という値を取得したいのですがどうすればよいのでしょうか?

  • Oracle
  • 回答数2
  • ありがとう数2

みんなの回答

回答No.2

データ属性が日付型(data型)であれば、歴の変換や加減算は簡単です。 to_char( to_date('1803','yymm','nls_calendar = ''Japanese Imperial''') - interval '1' year, 'yymm','nls_calendar = ''Japanese Imperial''');

  • SUPER-NEO
  • ベストアンサー率38% (706/1857)
回答No.1

私の考えが間違っていなければ、ADD_MONTHS 関数は、 西暦の日付に対して行うものと認識しております。 一体、質問文中の書き方はどこを参考にされたのでしょうか? 他のバージョンでの動作実績があるとか!? ADD_MONTHS で1年前の値を和暦で取得するには、 1、西暦で1年前の値を取得する 2、和暦変換 以上の2ステップになると思います。 ちなみに、「1、」の方法ですが、 SELECT ADD_MONTHS(SYSDATE, 12 * -1) FROM DUAL; で求められます。

kanmin
質問者

補足

申し訳ありません。 西暦から和暦への変換を教えてもらえますか?

関連するQ&A

  • PLSQLのTO_CHARについて

    こんにちわ。 いまORACLE19gのPLSQLでストアドプロシジャを作成しています。 そこでつぎのようなことをしたいのですがうまくいきません。 TO_CHAR(vCnt, '00000') vCntの値をLOOPで加算していって, vCntの値が1のときは'00001', vCntの値が2のときは'00002', vCntの値が10のときは'00010'というふうにしたいのですが, 上記のTO_CHARの結果, vCntの値が1のときは' 00001'というふうに, 頭に1バイトのスペースが入ってしまいます。 どうすればvCntの値が1のときは'00001'と 変換できるでしょうか? 教えてください。宜しくお願いします。

  • 和暦を使ってますか?

    通常のface-to-faceで行われる契約や 役所では、まだまだ和暦の使用が当たり 前だが、見積もり書・企画書・提案書・ 社内行事・伺い書・ネット売買による契約・ などなど私の周りでは、西暦を使うことが 多くなって来た。 私の周りでは、和暦よりも西暦を使う 使われる頻度が多い・・・ 皆さんの周りでは、どうですか!?和暦使われてすか? また、和暦のこんなところが、良いよ!なんて有りましたら教えて下さい。

  • ○日前のデータの取得方法について

    日付型で、yyyy/mm/dd hh:mm:ss (24時間表記)の書式で値を持つフィールドがあります。 日にちの区切りを0時ではなく、AM10時だとした時、 仮に12/1 10:00 ~ 12/5 9:59までの値を取るSQLは、どのように書くのでしょうか? また、「当日を基点として、○日前の日付を持つ値を取りたい」という場合、add_months以外で何か取得する方法があるのでしょうか? (add_monthsを使うと、確実に値はあるはずなのに、0件になってしまいました) なんとなくですが、↓こんな感じになるのかなと思っています。 select * from ×× where hiduke = add_months(sysdate -4) 一度に2つも質問して申し訳ありません。 どちらかでも構いませんので、お分かりになる方がいらっしゃいましたら、教えていただければと思います。 よろしくお願いします。

  • PLSQLで

    PLSQL(Oracle9.i)で以下のことをしようとしています。 しかし、コンパイルは通るがステップ実行すると固まります。 -- 宣言部 TYPE REC_A IS RECORD( a NUMBER, b NUMBER, c NUMBER, d NUMBER, e NUMBER, f NUMBER, g NUMBER, ); TYPE B_TBL IS TABLE OF REC_A INDEX BY BINARY_INTEGER; TYPE C_TBL IS TABLE OF B_TBL INDEX BY BINARY_INTEGER; D_TBL C_TBL; -- 関数部 FOR i IN 1..3 LOOP  FOR J IN 1..3 LOOP   D_TBL(I)(J).a := 1;   D_TBL(I)(J).b := 2;   D_TBL(I)(J).c := 3;   D_TBL(I)(J).d := 4;   D_TBL(I)(J).e := 5;   D_TBL(I)(J).f := 6;   D_TBL(I)(J).g := 7;  END LOOP; END LOOP; なにぶんまだPLSQLの勉強始めて1ヶ月満たないもので、分からないことをどう伝えればいいのかも分からない状況です。 処理的には、D_TBL(I)(J)に値をいろいろセットし集計をとりCSVにはきだす処理です。 これだけでは分からないかもしれませんが、よろしくお願いします。

  • 和暦が平成の次になったら…?

    VB6で、Format(Now, "ggg e年m月d日") などで和暦が取得できたかと思いますが、 平成が終わり新しい元号になった場合、VBランタイムを更新することになるのですか? それはVBソフトの開発者 や ソフト使用者が共にサービスパックのバージョン をあげなければならないですよね!? それとも、VBと言えど、OSの機能を使って和暦表示をしていて、Windows Updateで 最新の状態にあるパソコンを使っている限りは、他には更新する必要はないのでしょうか? (具体的に、どのモジュールが和暦を判定しているのか?を教えて頂ければ、すっきりする かも知れません)

  • 現在の月を基準に、遡って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

    • ベストアンサー
    • Java
  • 明治・大正の和暦を西暦に変換する方法について

    お世話になります。 データベース(Oracle10g)に「M150401」や「T050501」のように和暦形式で登録されている生年月日を 西暦に変換(18820401・19160501)したく下記SQL update テーブル名 set 生年月日= to_char(to_date(生年月日,'eyymmdd','nls_calendar = ''Japanese Imperial'''),'yyyymmdd') を実行すると、「ORA-01864:指定した日付は 現行カレンダの有効範囲外です」のエラーが発生し、大正以前の生年月日を西暦に 変換できません。 このようなケースの場合、どのようにすれば西暦変換できるでしょうか? よろしくお願いします。

  • 和暦の存在意義

    記念日が何年前かを探すにも、西暦を使わないと計算できない。 結婚指輪に「H4」と刻印されていても、平成4年が西暦何年かを調べないと計算ができない。 和暦って必要なのだろうか? 和暦を使うのは役所と銀行だけ。 今や、和暦って邪魔な存在なのじゃ・・・ 必要なのかな・・・?

  • PLSQLで添え字を使用してフィールドの内容を取得したい。

    PLSQLで添え字を使用してフィールドの内容を取得したい。 http://okwave.jp/qa/q1862026.html 上記のページを確認しましたが、どうも回答が私が求めている内容とは 違いますのでご質問させていただきます。 PLSQLで下記のような動作を行いたいです。 下記のようなテーブル構造のテーブルがデータベースにあります。 キー、フィールド1、フィールド2・・・・フィールド50 特定の内容をフィールド1からフィールド50までの値を確認する、 と言う簡単な内容なんですがVBなどで用いる フィールド名 & 添え字 などで内容を確認しようと思ったのですが、PLSQLでやるのが上手く出来ず どのようにやれば上記の内容もしくは上記に近い内容を実装できるのでしょうか・・・ 些細な事でも構いませんのでご助言頂けましたら幸いです。 Oracleのバージョンは8.1.6.0.0です。

  • 生年月日を訊かれたら和暦・西暦 どっちで答える?

    生年月日を訊かれたら和暦・西暦 どっちで答える? この前ある会社へ行ったところ、面白いカレンダーを見かけました。 西暦2014年 平成26年 昭和89年 大正103年 と書いてあったのです。 私は昭和生まれなのですが和暦で回答すると、年齢がすぐに割り出せないですよね。