0

昨日の午後 10 時 (22 時 00 分) から今日の午前 8 時 (08 時 00 分) までの時間範囲はわかりますか?

WHERE MOPACTIVITY.MOPSTART between (trunc(sysdate-1) + 22/24) and (trunc(sysdate) + 08/24)
4

1 に答える 1

3

簡単なクエリで得られる範囲を確認するのは簡単です。

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:002 回記録される危険性がありますが、これはおそらくあなたが望むものではありません。オーバーラップを避けるには、次のように変更できます。

WHERE MOPACTIVITY.MOPSTART >= trunc(sysdate-1) + interval '22' hour
AND MOPACTIVITY.MOPSTART < trunc(sysdate) + interval '8' hour
于 2013-07-29T16:54:02.183 に答える