假如一周的概念:周一,周二,,,,周日 取一个(早一点的)已知的是周一的日期: date0 if floor(trunc(date1 - date0)/7) = floor(trunc(date2 - date0)/7) then
笨办法 你可先判断是否为同一个月,在判断是不是同一周 if to_char(date1,'yyyymm')=to_char(date2,'yyyymm') then if to_char(date1,'ww')=to_char(date2,'ww') then
declare -- Local variables here date1 varchar2(8):='20020901'; date2 varchar2(8):='20020903'; begin -- Test statements here if (to_date(date1,'yyyymmdd')-to_char(to_date(date1,'yyyymmdd'),'d'))-(to_date(date2,'yyyymmdd')-to_char(to_date(date2,'yyyymmdd'),'d'))=0 then dbms_output.put_line('一样'); end if ; end; 如果第一天在一个
create or replace procedure compare(date1 in date,date2 in date) is flag varchar2(5); begin if abs(date1-date2)<7 then if (date1-date2)*(to_char(date1,'d')-to_char(date2,'d'))>0 then flag:='yes'; else flag:='no'; end if; else flag:='no'; end if; dbms_output.put_line(flag);
同月
(:a- date)/7 equal (:b-date)/7
整数相等即同一周
to_char(date1,'yyyyww')=to_char(date2,'yyyyww') 才是正解
to_char(date1,'yyyymm')=to_char(date2,'yyyymm')
取一个(早一点的)已知的是周一的日期: date0
if floor(trunc(date1 - date0)/7) = floor(trunc(date2 - date0)/7) then
你可先判断是否为同一个月,在判断是不是同一周
if to_char(date1,'yyyymm')=to_char(date2,'yyyymm') then
if to_char(date1,'ww')=to_char(date2,'ww') then
-- Local variables here
date1 varchar2(8):='20020901';
date2 varchar2(8):='20020903';
begin
-- Test statements here
if (to_date(date1,'yyyymmdd')-to_char(to_date(date1,'yyyymmdd'),'d'))-(to_date(date2,'yyyymmdd')-to_char(to_date(date2,'yyyymmdd'),'d'))=0 then
dbms_output.put_line('一样');
end if ;
end;
如果第一天在一个
flag varchar2(5);
begin
if abs(date1-date2)<7
then if (date1-date2)*(to_char(date1,'d')-to_char(date2,'d'))>0
then flag:='yes';
else flag:='no';
end if;
else flag:='no';
end if;
dbms_output.put_line(flag);
end compare;SQL> exec compare('31-dec-2001','01-jan-2002');
yesPL/SQL procedure successfully completed.SQL> exec compare(sysdate,sysdate-3);
yesPL/SQL procedure successfully completed.SQL> exec compare(sysdate,sysdate-4);
noPL/SQL procedure successfully completed.
SQL> select decode(sign(abs(to_number('20020903')-to_number('20020902'))-7),1,'不在一周内',
2 decode(instr(to_char(to_date('20020903','yyyymmdd'),'day'),
3 to_char(to_date('20020902','yyyymmdd'),'day')),0,'在一周内','不在一周内')) from dual;DECODE(S
--------
在一周内SQL>
noPL/SQL 过程已成功完成。已用时间: 00: 00: 00.61
周内',
16:19:00 2 decode(instr(to_char(to_date('20020902','yyyymmdd'),'day'),
16:19:00 3 to_char(to_date('20020902','yyyymmdd'),'day')),0,'在一周内','不在一周内')) from dual;DECODE(SIG
----------
不在一周内已用时间: 00: 00: 00.20
16:19:00 jlanzpa817>
SQL> select decode(sign(next_day(to_date('20020903','yyyymmdd'),1)-next_day(to_date('20020903','yyyy
mmdd'),1)),0,'在一周内','不在一周内') from dual;DECODE(S
--------
在一周内SQL> select decode(sign(next_day(to_date('20020902','yyyymmdd'),1)-next_day(to_date('20020903','yyyy
mmdd'),1)),0,'在一周内','不在一周内') from dual;DECODE(S
--------
在一周内SQL> select decode(sign(next_day(to_date('20020912','yyyymmdd'),1)-next_day(to_date('20020903','yyy
ymmdd'),1)),0,'在一周内','不在一周内') from dual;DECODE(SIG
----------
不在一周内SQL>
16:48:39 jlanzpa817>select decode(sign(next_day(to_date('20020901','yyyymmdd'),1)
16:49:14 2 -next_day(to_date('20020904','yyyy
16:49:14 3 mmdd'),1)),0,'在一周内','不在一周内') from dual;DECODE(SIG
----------
在一周内已用时间: 00: 00: 00.20
16:49:14 jlanzpa817>
周日, 周四
改为
(date1-date2)*(to_char(date1,'d')-to_char(date2,'d'))>=0 jlandzpa(欧高黎嘉陈) :
多谢!
select decode(sign(next_day(to_date('20020901','yyyymmdd')-1,1)
-next_day(to_date('20020904','yyyymmdd')-1,1)),0,'在一周内','不在一周内') from dual;
17:00:04 jlanzpa817>exec compare(sysdate,sysdate+4)
noPL/SQL 过程已成功完成。已用时间: 00: 00: 00.71
2 -next_day(to_date('20020904','yyyymmdd')-1,1)),0,'在一周内','不在一周内') from dual;DECODE(SIG
----------
不在一周内周日 周三
SQL> select decode(sign(next_day(to_date('20020902','yyyymmdd')-1,1)
2 -next_day(to_date('20020908','yyyymmdd')-1,1)),0,'在一周内','不在一周内') from dual;DECODE(S
--------
在一周内周一 本周日这样可以了吧
:-)
周日是一周的开始
ok;
end if ;重属抄袭
呵呵,我没有想到那个函数.