Вы можете использовать оператор case в интервале для проверки времени суток, а затем пропустить:
case
when to_char(trunc(sysdate, 'HH24') + 2/24, 'HH24') between '06' and '20' then
trunc(sysdate, 'HH24') + 2/24
else
trunc(sysdate)+1+(6/24)
end
Это можно расширить, чтобы включить проверку в будний день.(Вы должны быть осторожны при проверке дня недели, поскольку он зависит от настроек NLS.)
Что-то вроде следующего будет обрабатывать день недели, но вам придется подтвердить крайние случаи и проверитьваши настройки NLS (для меня понедельник - 1-й день, а воскресенье - 7-й):
case
when
to_number(to_char(sysdate, 'D')) between 1 and 5 then
case
when to_char(trunc(sysdate, 'HH24') + 2/24, 'HH24') between '06' and '20'
then
trunc(sysdate, 'HH24') + 2/24
else
trunc(sysdate)+1+(6/24)
end
else
trunc(sysdate) + (8 - to_number(to_char(sysdate, 'D'))) + 6/24
end
Хотя ... думаю, что мы сейчас твердо на этапе "время, чтобы исправить функцию".:)