这会给我的时间范围从昨天晚上10点(2200点)到今天早上8点(0800点)?
WHERE MOPACTIVITY.MOPSTART between (trunc(sysdate-1) + 22/24) and (trunc(sysdate) + 08/24)
答案 0 :(得分: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
但有两点意见。 (1)尽管使用分数作为时间偏移是好的,但使用interval literals可能会更清楚:
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