1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| create or replace function func_DureeSec (
p_date_deb date,
p_date_fin date,
p_heure_debut varchar2 default '07:00',
p_heure_fin varchar2 default '19:00')
return number deterministic as
l_date_deb date;
l_date_fin date;
begin
if (p_date_deb >= to_date(to_char(p_date_deb,'YYYYMMDD')||p_heure_fin,'YYYYMMDDhh24:mi')) then
l_date_deb := to_date(to_char(p_date_deb + 1,'YYYYMMDD')||p_heure_debut,'YYYYMMDDhh24:mi');
elsif (p_date_deb <= to_date(to_char(p_date_deb,'YYYYMMDD')||p_heure_debut,'YYYYMMDDhh24:mi')) then
l_date_deb := to_date(to_char(p_date_deb,'YYYYMMDD')||p_heure_debut,'YYYYMMDDhh24:mi');
else
l_date_deb := p_date_deb;
end if;
if (p_date_fin >= to_date(to_char(p_date_fin,'YYYYMMDD')||p_heure_fin,'YYYYMMDDhh24:mi')) then
l_date_fin := to_date(to_char(p_date_fin,'YYYYMMDD')||p_heure_fin,'YYYYMMDDhh24:mi');
elsif (p_date_fin <= to_date(to_char(p_date_fin,'YYYYMMDD')||p_heure_debut,'YYYYMMDDhh24:mi')) then
l_date_fin := to_date(to_char(p_date_fin - 1,'YYYYMMDD')||p_heure_fin,'YYYYMMDDhh24:mi');
else
l_date_fin := p_date_fin;
end if;
return (l_date_fin - to_date(to_char(l_date_fin,'YYYYMMDD')||p_heure_debut,'YYYYMMDDhh24:mi'))*24*60*60
+ (to_date(to_char(l_date_deb,'YYYYMMDD')||p_heure_fin,'YYYYMMDDhh24:mi') - l_date_deb)*24*60*60
+ (trunc(l_date_fin - 1) - trunc(l_date_deb + 1) +1) * ( to_date('19000101'||p_heure_fin,'YYYYMMDDhh24:mi')
-to_date('19000101'||p_heure_debut,'YYYYMMDDhh24:mi'))*24*60*60;
end func_DureeSec;
/ |
Partager