0

这会给我从昨天晚上 10 点(2200 小时)到今天早上 8 点(0800 小时)的时间范围吗?

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

不过有两个观察结果。(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
于 2013-07-29T16:54:02.183 回答