質問: お世話になります。 oracleで、作業Aの開始時間と終了時間の中に9時〜18時が含まれている人物を抽出したいです。 開始時間か終了時間のどちらかが9時〜18時にかかっている人は抽出したのですが、9時〜18時を丸々含んでいる人をどのように出せばいいのか悩んでいます。 よろしくお願い致します。 ■追記 質問が大雑把ですみません... テーブルA 氏名 作業名 開始時間 終了時間 ------------------------------- A子 作業A 2016/01/01 03:00:00 2016/01/01 08:00:00 B男 作業B 2016/01/02 10:00:00 2016/01/02 19:00:00 C美 作業C 2016/01/03 08:00:00 2016/01/03 19:00:00 このようなテーブルAがあり、最終的にB男とC美を抽出したいです。 現在、指定の時間帯である9時~18時に開始時間が被っているB男のみ抽出できています。 C美を抽出するための条件がほしいです... ◾︎追記 すみません、焦って書き込んでしまい、自分で条件をきちんと整理出来ていませんでした...最初に作業Aと言ってしまいましたが、sleepsheepさんがおっしゃる通り、9時から18時に作業していた人を抽出したかったのです。 「条件に合わない条件」を試したところ、思った通りの結果を出すことができました。 お二方とも質問に親切にお答えいただき、ありがとうございました。
回答: 条件を整理してみると、 * 開始時間が 09:00 以前である * 終了時間が 18:00 以後である の二つを**同時に満たす**作業Aを持っている人ですよね? 作業Aテーブルがどういう構造なのか提示してください。 ※開始時間のカラムが「年月日を含む」のかどうかでまた変わってくるので テーブル例示に伴い追記 条件として、 * 開始時間と終了時間が同一日であり * かつ開始時間が09:00 以前であり * かつ終了時間が18:00 以後である 人を抽出すると考えます。(開始時間と終了時間が別の日の場合は条件が違ってきますので) ベタに書けばこうですかね。 ``` SELECT * FROM テーブルA WHERE TO_CHAR(開始時間,'YYYYMMDD')=TO_CHAR(終了時間,'YYYYMMDD') AND EXTRACT(HOUR FROM 開始時間) < 9 AND EXTRACT(HOUR FROM 終了時間) >= 18 ```