开始日期计算给定结束日期和工作时间PL / SQL

时间:2012-07-20 12:58:28

标签: sql oracle datetime plsql

使用Oracle PL / SQL我需要使用截止日期和完成任务所需的工作时间来计算任务的开始日期。

鉴于24-JUL-2012 17:00作为截止日期,需要20小时完成任务并使用工作时间为上午8点至下午5点(午餐时间为1小时 - 每天最多8小时)我需要计算在PL / SQL中,开始日期/时间是什么......应该在2012年7月22日13:00之前出现。

1 个答案:

答案 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;

请注意,该功能并不一贯考虑午餐时间。您需要准确定义午餐时间,并相应地调整功能。