• ベストアンサー

日数算出SQL

すみません教えてください。 DB→Oracle9iで「日付A」と「日付B」の間の日数を表示させようとしているのですが、うまくいきません。 参考書などでは、「Months_Between関数」でも試してみたのですが、うまくいきません。単純なやりかたあればおしえていただきたいのですが、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

こんにちは。 Months_Betweenは、差分を月で表す場合に使います。 この場合は1ヶ月未満は小数になってしまいますね・・・。 日付だけでいいなら単純に引き算します。 SELECT to_date(日付A)-to_date(日付B) FROM テーブル です。 (^^ゞ

mmbbol
質問者

補足

回答ありがとうございます。 引き算時に書式が異なるのですが、これを変更するにはどうしたらよいでしょうか? 現在「日付A」が「YYYY/MM/DD」と「日付B」が「YYYY/MM/DD 24HHMISS」で引き算されてしまっているのですが、これを「to_date関数」で引数「'YYYY/MM/DD'」を与えて算出するとエラーがでてしまうのですがなぜでしょうか? エラーメッセージが「ORA-01841:(周)年は-47132と+9999の間で指定しなければなりませんが、0であってはなりません。」みたいな・・・。 お願い致します。

その他の回答 (3)

回答No.4

こんばんは。 うーん、よくわかりませんが・・・、 日付Aと日付Bはもともと何型ですか? 書式はどうですか? 書式が異なることが問題なら、あわせるだけでいいような気がしますが・・・? (^^ゞ

mmbbol
質問者

お礼

回答ありがとうございます。 両方ともDate型ですね。 とりあえず、精度を求められるものではないので、以降は再度自分で確認してみたいと思います。 ありがとうございました。

  • _tomo_
  • ベストアンサー率28% (2/7)
回答No.2

単純に引き算すると「日付A」と「日付B」の間の日数を 算出出来ますよ  SELECT TO_DATE(「日付A) - TO_DATE(「日付B」) FROM DUAL;

mmbbol
質問者

お礼

回答ありがとうございます。 説明いただいた通り算術で計算できました。 ありがとうございました。

  • gole
  • ベストアンサー率66% (2/3)
回答No.1

単純に引き算でできませんか? <例> select trunc(sysdate) - to_date('2004/01/01') from dual; trunc(sysdate)をto_date('2004/12/31')にすると1年間の日数が出ます。

mmbbol
質問者

お礼

回答ありがとうございました。 説明いただいた通り計算できました。 分かりやすい例題もありがとうございました。

関連するQ&A