使用 Oracle PL/SQL 我需要使用截止日期和完成任务所需的工作时间来计算任务的开始日期。
给定 2012 年 7 月 24 日 17:00 作为截止日期和 20 小时作为完成任务所需的时间,并使用上午 8 点至下午 5 点的工作时间(1 小时午餐 - 所以每天最多 8 小时)我需要在 PL 中弄清楚/SQL 开始日期/时间是什么...应该在 2012 年 7 月 22 日 13:00 出现。
以下代码可能是一个起点:
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;
请注意,该函数并未始终考虑午餐时间。您需要准确定义午餐时间并相应地调整功能。