使用Oracle PL / SQL我需要使用截止日期和完成任务所需的工作时间来计算任务的开始日期。
鉴于24-JUL-2012 17:00作为截止日期,需要20小时完成任务并使用工作时间为上午8点至下午5点(午餐时间为1小时 - 每天最多8小时)我需要计算在PL / SQL中,开始日期/时间是什么......应该在2012年7月22日13:00之前出现。
答案 0 :(得分:2)
以下代码可能是一个起点:
function task_start_date(
p_due_date date,
p_working_hours number
) return date
is
l_start_date date;
begin
-- Subtract full days
l_start_date := p_due_date - trunc(p_working_hours / 8);
-- Subtract remaining hours
l_start_date := l_start_date - mod(p_working_hours, 8) / 24;
-- Fix date if the due date is before 8AM
if to_number(to_char(l_start_date, 'HH24')) < 8 then
l_start_date := l_start_date - 15 / 24;
end if;
return l_start_date;
end task_start_date;
请注意,该功能并不一贯考虑午餐时间。您需要准确定义午餐时间,并相应地调整功能。