create or replace function DateDiff(DatePart varchar, StartDate date, EndDate date)
return number
as
result number;
sType char(1);
begin
sType := substr(upper(DatePart), 1, 1);
if sType = 'S' then
result := trunc(86400 * (EndDate - StartDate));
end if;
if sType = 'H' then
result := trunc(((86400 * (EndDate - StartDate)) / 60) / 60);
end if;
if sType = 'D' then
result := trunc((((86400 * (EndDate - StartDate)) / 60) / 60) / 24);
end if;
if sType = 'W' then
result := trunc(((((86400 * (EndDate - StartDate)) / 60) / 60) / 24) / 7);
end if;
if sType = 'Y' then
result := trunc(months_between(EndDate, StartDate) / 12);
end if;
if sType = 'N' then
result := trunc((86400 * (EndDate - StartDate)) / 60);
end if;
if sType = 'M' then
if upper(DatePart) like 'MI%' then
result := trunc((86400 * (EndDate - StartDate)) / 60);
else
result := trunc(months_between(EndDate, StartDate));
end if;
end if;
return result;
exception when others then return null;
end;
return number
as
result number;
sType char(1);
begin
sType := substr(upper(DatePart), 1, 1);
if sType = 'S' then
result := trunc(86400 * (EndDate - StartDate));
end if;
if sType = 'H' then
result := trunc(((86400 * (EndDate - StartDate)) / 60) / 60);
end if;
if sType = 'D' then
result := trunc((((86400 * (EndDate - StartDate)) / 60) / 60) / 24);
end if;
if sType = 'W' then
result := trunc(((((86400 * (EndDate - StartDate)) / 60) / 60) / 24) / 7);
end if;
if sType = 'Y' then
result := trunc(months_between(EndDate, StartDate) / 12);
end if;
if sType = 'N' then
result := trunc((86400 * (EndDate - StartDate)) / 60);
end if;
if sType = 'M' then
if upper(DatePart) like 'MI%' then
result := trunc((86400 * (EndDate - StartDate)) / 60);
else
result := trunc(months_between(EndDate, StartDate));
end if;
end if;
return result;
exception when others then return null;
end;
No comments:
Post a Comment