Hej,
Jeg prøver lige at uddybe lidt.
Jeg har en tabel på en database indeholdende to timestamps vedr. hvornår en sag er modtaget (timestamp 1) og til hvornår en sag er behandlet (timestamp 2). Disse timestamps ønsker jeg at beregne antal mellem disse timestamps indenfor arbejdstid.
Min problemstilling opstår når delta kun skal udregnes indenfor arbejdstid som er defineret i tabellen WF_WORK_CALENDAR
Tabellen WF_WORK_CALENDAR har følgende kolonner. Som det ses så er åbningstiden forskellig dag for dag.
Starttid Sluttid
22-01-2013 08:00:00 22-01-2013 16:00:00
23-01-2013 08:00:00 23-01-2013 16:00:00
24-01-2013 08:00:00 24-01-2013 16:00:00
25-01-2013 08:00:00 25-01-2013 15:30:00
25-01-2013 10:00:00 25-01-2013 16:00:00
25-01-2013 00:00:00 25-01-2013 00:00:00
Jeg vil gerne, at beregningen foretages i en database funktion som jeg kan genanvende.
Jeg har fundet følgende funktion som inspiration, men denne kigger dog ikke på tabel som udgangspunkt for åbningstiderne.
https://forums.oracle.com/ (...)
CREATE OR REPLACE
FUNCTION get_bus_minutes_between(
p_start_date DATE,
p_end_date DATE
)
RETURN NUMBER
IS
v_return NUMBER;
BEGIN
with t as (
select case level
when 1 then greatest(p_start_date,trunc(p_start_date) + 9 / 24)
else trunc(p_start_date) + level - 15 / 24
end start_dt,
case connect_by_isleaf
when 1 then least(p_end_date,trunc(p_end_date) + 18 / 24)
else trunc(p_start_date) + level - 8 / 24
end end_dt
from dual
connect by level <= trunc(p_end_date) - trunc(p_start_date) + 1
)
select sum(greatest(end_dt - start_dt,0)) * 24 * 60 work_minutes
into v_return
from t
where trunc(start_dt) - trunc(start_dt,'iw') < 5; -- exclude weekends
RETURN v_return;
END;