昨日の午後 10 時 (22 時 00 分) から今日の午前 8 時 (08 時 00 分) までの時間範囲はわかりますか?
WHERE MOPACTIVITY.MOPSTART between (trunc(sysdate-1) + 22/24) and (trunc(sysdate) + 08/24)
簡単なクエリで得られる範囲を確認するのは簡単です。
alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS';
select trunc(sysdate-1) + 22/24, trunc(sysdate) + 08/24 from dual;
TRUNC(SYSDATE-1)+22 TRUNC(SYSDATE)+08/2
------------------- -------------------
2013-07-28 22:00:00 2013-07-29 08:00:00
ただし、2つの観察。(1) 時間オフセットに分数を使用することは問題ありませんが、間隔リテラルを使用する方が少し明確になる場合があります。
select trunc(sysdate-1) + interval '22' hour,
trunc(sysdate) + interval '8' hour
from dual;
TRUNC(SYSDATE-1)+IN TRUNC(SYSDATE)+INTE
------------------- -------------------
2013-07-28 22:00:00 2013-07-29 08:00:00
そして (2)between
は包括的であるため、1 日を「シフト」に分割している場合、データが正確に08:00
2 回記録される危険性がありますが、これはおそらくあなたが望むものではありません。オーバーラップを避けるには、次のように変更できます。
WHERE MOPACTIVITY.MOPSTART >= trunc(sysdate-1) + interval '22' hour
AND MOPACTIVITY.MOPSTART < trunc(sysdate) + interval '8' hour