select * from dual
where
(
--8点之后并且20点之前
substr(to_char(sysdate,'yyyymmdd hh24:mi:ss'),10,2) >= 8 and substr(to_char(sysdate,'yyyymmdd hh24:mi:ss'),10,2) <= 20
--v_date筛选8-20
and v_data between to_date(to_char(sysdate,'yyyymmdd')||'08:00:00','yyyymmdd hh24:mi:ss') and to_date(to_char(sysdate,'yyyymmdd')||'20:00:00','yyyymmdd hh24:mi:ss')
)
or
(
--20点之后并且8点之前
substr(to_char(sysdate,'yyyymmdd hh24:mi:ss'),10,2) > 20 and substr(to_char(sysdate,'yyyymmdd hh24:mi:ss'),10,2) < 8
--v_date筛选20点之后到8点之前
and v_data between to_date(to_char(sysdate,'yyyymmdd')||'20:00:01','yyyymmdd hh24:mi:ss') and to_date(to_char(sysdate,'yyyymmdd')||'07:59:59','yyyymmdd hh24:mi:ss')
)