回覆: 求一個關於排期的儲存過程, 感謝大家

longwansheng發表於2007-03-09

現在有一個有關未用排期的問題, 現在預約表AAA, 存有一個預約開始時間STARTDATE, 預約結束時間ENDDATE, 表內有很多資訊,

比如一條資訊是 開始時間2007.2.15,結束時間2007.4.1, 另一條資料是開始時間2007.5.20,結束時間2007.8.10, 我現在想知道的是, 我給一個時間段, 比如2007.1---2007.6, 未用的時間有哪些, 我需要的結果是

2007.1.1至2007.2.14
2007.4.2至2007.5.19

http://www.itpub.net/showthread.php?s=&postid=7026685#post7026685

[@more@]

/*
create table sche_test (start_date date,end_date date)

insert into sche_test values(sysdate,sysdate+5);

insert into sche_test values(sysdate+9,sysdate+15);

insert into sche_test values(sysdate+12,sysdate+32);

insert into sche_test values(sysdate+30,sysdate+45);

insert into sche_test values(sysdate+60,sysdate+85);
*/
create or replace function sche_date_test return varchar2 is
min_date date;
max_date date;
curr_date date;
v_return varchar2(3000);

cursor cur is
select trunc(start_date) start_date,trunc(end_date) end_date
from sche_test
order by 1,2;

begin

select trunc(sysdate),min(start_date) min_date,max(end_date) max_date
into curr_date,min_date,max_date
from sche_test;

for rec in cur loop
if curr_date<=rec.start_date-1 then
v_return:=v_return||to_char(curr_date,'yyyymmdd')||'-'||to_char(rec.start_date-1,'yyyymmdd')||' ; ';
end if;
curr_date:=rec.end_date+1;

end loop;
if v_return is null then
v_return:='null';
end if;

return v_return;

exception
when others then
return 'null';

end;

/*
select sche_date_test() from dual

20070315-20070317 ; 20070424-20070507 ;
*/

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/92289/viewspace-903642/,如需轉載,請註明出處,否則將追究法律責任。

相關文章