Это довольно легко сделать с интервалами ...
where mod_date_time >= trunc(sysdate) + to_dsinterval('0 4:0:0') -- 4:00am today
and mod_date_time <= trunc(sysdate) + to_dsinterval('1 4:0:0') -- 4:00am tomorrow
... за исключением этой загадки:
Проблема с опрокидыванием состоит в том, что, как только наступает полночь,даты будут корректироваться
Так что вы не можете использовать SYSDATE в этом запросе без привязки.У вас есть столбец, который представляет день смены или время начала?Вы можете использовать это вместо:
where mod_date_time >= trunc(shift_start_date) + to_dsinterval('0 4:0:0') -- 4:00am today
and mod_date_time <= trunc(shift_start_date) + to_dsinterval('1 4:0:0') -- 4:00am tomorrow
В качестве альтернативы, вы можете просто запустить запрос в историческом режиме:
where mod_date_time >= trunc(sysdate-1) + to_dsinterval('0 4:0:0') -- 4:00am today
and mod_date_time <= trunc(sysdate) + to_dsinterval('0 4:0:0') -- 4:00am tomorrow