- ベストアンサー
○日前のデータの取得方法について
日付型で、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つも質問して申し訳ありません。 どちらかでも構いませんので、お分かりになる方がいらっしゃいましたら、教えていただければと思います。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
当日という表現は、それ自身が24時間の範囲を含みかねず sysdate(現在の日時)とは異なります。(trunc(sysdate,'dd') が当日です。) add_months関数以外に、オラクルでは、期間式が使えます。 select * from hoge where trunc(hiduke,'dd')=trunc(sysdate,'dd') - interval '4' day;
その他の回答 (2)
- 7colors
- ベストアンサー率25% (29/114)
hidukeはdate型なのだろうか? CHARとかなら、フォーマットを合わせないと日付の比較はうまくいかないはず。 DEFはYYYY-MM-DDとかの形式じゃないかな。 日にちの範囲は日付フィールドの期間大小でいいんじゃないかな。 特に一日の初めと終わりの時間が固定なのであれば。 日付 >= 'YYYY/MM/DD 10:00:00' 日付 < 'YYYY/MM/DD 10:00:00'
- bin-chan
- ベストアンサー率33% (1403/4213)
前半のみ。 年が省略されてますが、2005年とします。 09:59:00も09:59:59も 09:59とします。 where to_char(<日付フィールド>, 'yyyy/mm/dd hh24:mi') between '2005/12/01 10:00' and '2005/12/05 09:59';