アプリ版:「スタンプのみでお礼する」機能のリリースについて

日付型で、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つも質問して申し訳ありません。
どちらかでも構いませんので、お分かりになる方がいらっしゃいましたら、教えていただければと思います。
よろしくお願いします。

A 回答 (3件)

当日という表現は、それ自身が24時間の範囲を含みかねず


sysdate(現在の日時)とは異なります。(trunc(sysdate,'dd') が当日です。)

add_months関数以外に、オラクルでは、期間式が使えます。

select * from hoge
where trunc(hiduke,'dd')=trunc(sysdate,'dd') - interval '4' day;
    • good
    • 1

hidukeはdate型なのだろうか?


CHARとかなら、フォーマットを合わせないと日付の比較はうまくいかないはず。
DEFはYYYY-MM-DDとかの形式じゃないかな。

日にちの範囲は日付フィールドの期間大小でいいんじゃないかな。
特に一日の初めと終わりの時間が固定なのであれば。
日付 >= 'YYYY/MM/DD 10:00:00'
日付 < 'YYYY/MM/DD 10:00:00'
    • good
    • 0

前半のみ。


年が省略されてますが、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';
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!