这会给我从昨天晚上 10 点(2200 小时)到今天早上 8 点(0800 小时)的时间范围吗?
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
不过有两个观察结果。(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
具有包容性,因此如果您将一天分成“班次”,您可能会冒着将数据记录在精确08:00
计算两次的风险,这可能不是您想要的。为避免重叠,您可以将其更改为:
WHERE MOPACTIVITY.MOPSTART >= trunc(sysdate-1) + interval '22' hour
AND MOPACTIVITY.MOPSTART < trunc(sysdate) + interval '8' hour