需求:篩選出今天之前的三個交易日,排除週六週日以及國家法定節假日
一、建立節假日表
create table holiday
(holiday_date number(10) not null,
holiday_name varchar2(255) not null,
holiday_type char(1) not null,
time_stamp date default sysdate
)tablespace ts_dw
pctfree 10
initrans 1
maxtrans 255
storage
(initial 80k
next 16k
minextents 1
maxextents unlimited
);comment on column holiday.holiday_date
is '節假日期(yyyymmdd)';
comment on column holiday.holiday_name
is '節假日名稱';
comment on column holiday.holiday_type
is '是否放假';
comment on column holiday.time_stamp
is '時間戳';
注意:節假日資訊需要手動維護,每年根據國家公布的節假日資訊進行更新即可。
insert into holiday (holiday_date, holiday_name, holiday_type) values (20170214, '情人節', '1');
insert into holiday (holiday_date, holiday_name, holiday_type) values (20171001, '國慶節、中秋節', '0');
二、儲存過程
create or replace procedure holiday_test is
i number default 0;
todaydate date;--今天
num number;
h_type char;
flag number;--1是節假日 0為不是節假日
week number default 0;
one date;--昨天
two date;--前天
onenum number;
twonum number;
todaynum number;
begin
--初始化為系統當前日期
todaydate := sysdate;
--判斷今天是不是週末
select to_char(todaydate, 'd') into week from dual;
todaynum := to_char(todaydate, 'yyyymmdd');
--判斷今天是不是節假日
select count(*) into num from holiday where holiday_date = todaynum;
if num > 0 then
--說明有記錄
select holiday_type into h_type from holiday where holiday_date = todaynum;
if h_type != '0' then
--holiday_type 不等於 0 說明不是節假日
flag := 0;
else
flag := 1;
end if;
else
flag := 0;
end if;
-- begin 處理
--今天不是週六且不是週末且不是節假日 如果今天是交易日則處理,否則不做任何處理
if (week <> 1) and (week <> 7) and (flag = 0) then
--昨天
one := todaydate - 1;--今天的前一天
i := 0;--初始化迴圈引數
while i < 20 loop
select to_char(one, 'd') into week from dual;--判斷是否是週末
onenum := to_char(one, 'yyyymmdd');
--判斷是否是節假日
select count(*) into num from holiday where holiday_date = onenum;
if num > 0 then--說明有記錄
select holiday_type into h_type from holiday where holiday_date = onenum;
if h_type != '0' then
--holiday_type 不等於 0 說明不是節假日
flag := 0;
else
flag := 1;
end if;
else
flag := 0;
end if;
--開始處理
if (week not in (1, 7)) and (flag = 0 ) then
--跳出當前迴圈
exit;
end if;
one := one - 1;
i := i + 1;
end loop;
--前天
i := 0; --初始化迴圈引數
two := one - 1;
while i < 20 loop
select to_char(two, 'd') into week from dual;--判斷是否是週末
twonum := to_char(two, 'yyyymmdd');
--判斷是否是節假日
select count(*) into num from holiday where holiday_date = twonum;
if num > 0 then--說明有記錄
select holiday_type into h_type from holiday where holiday_date = twonum;
if h_type != '0' then
--holiday_type 不等於 0 說明不是節假日
flag := 0;
else
flag := 1;
end if;
else
flag := 0;
end if;
--開始處理
if (week not in (1, 7)) and (flag = 0 ) then
--跳出當前迴圈
exit;
end if;
two := two - 1;
i := i + 1;
end loop;
dbms_output.put_line('today is '||todaynum);
dbms_output.put_line('one is '||onenum);
dbms_output.put_line('two is '||twonum);
end if;
end holiday_test;
執行此儲存過程,即可篩選出今天之前的三個交易日。
「法」定節假日
今天,法 定節假日的新方案出來了,要把五一的三天變成一天。這下可好,本來五一可以休七天的,估計現在只能和元旦一樣休兩天了。因為我們並沒有雙休,只是領導開恩才好不容易過上了 周 的。其實,對於 法 定節假日並不是太在意,也沒有權利在意,帶薪休假 就更不敢奢求了。最實在的是zf能不能強制企業實行最基本的...
「法」定節假日
今天,法 定節假日的新方案出來了,要把五一的三天變成一天。這下可好,本來五一可以休七天的,估計現在只能和元旦一樣休兩天了。因為我們並沒有雙休,只是領導開恩才好不容易過上了 周 的。其實,對於 法 定節假日並不是太在意,也沒有權利在意,帶薪休假 就更不敢奢求了。最實在的是zf能不能強制企業實行最基本的...
假日情節 假日回家的意義
來提高班近三年了,這是在學校度過的第三個暑假。每逢假日,我們總會談起節假日在校學習的意義的話題。現在回家能給家裡帶來什麼?現在每次回家在家呆不了幾天,爸媽會把我當寶一樣寵著,不讓幹這不讓幹那,還會做好吃的等著我 每次回家他們都會問,要多少錢啊,離家前他們會提前給我準備好我需要的生活費。我做著令自己最...