SQL> select trunc(sysdate,'yyyy')+47*7-to_char(trunc(sysdate,'yyyy'),'d')+1 from dual;TRUNC(SYSD
----------
23-11月-03SQL>
当前是2003年的第47周,星期天为一周的开始
上面返回的是第47周 星期天的日期,如果要返回星期一的
需要
select trunc(sysdate,'yyyy')+47*7-to_char(trunc(sysdate,'yyyy'),'d')+2 from dual;
----------
23-11月-03SQL>
当前是2003年的第47周,星期天为一周的开始
上面返回的是第47周 星期天的日期,如果要返回星期一的
需要
select trunc(sysdate,'yyyy')+47*7-to_char(trunc(sysdate,'yyyy'),'d')+2 from dual;
小于当前日期的:
select NEXT_DAY(sysdate,'星期一')-(TO_CHAR(NEXT_DAY(sysdate,'星期一'),'WW') -47)*7 from dual;
大于当前日期的:
select NEXT_DAY(sysdate,'星期一')-(TO_CHAR(NEXT_DAY(sysdate,'星期一'),'WW') -47)*7 from dual;
上面的语句只对本年内的是正确的。
----------
2003-11-12
-------------------
2003-11-10 00:00:00有什么不对吗?
select NEXT_DAY(sysdate,'星期一')-(TO_CHAR(NEXT_DAY(sysdate,'星期一'),'WW') -47)*7 from dual;
function getweekday(
p_week in varchar2,
p_flag in varchar2 default 'IW',
p_start_date in varchar2 default 1) --1為星期日
return varchar2
as
v_start_day varchar2(30) := '';
v_flag varchar2(2);--判斷是iw 還是 ww
begin if UPPER(p_flag)='IW' then
v_flag:=7;
else
v_flag:=0;
end if; select to_date(substr(p_week,1,4)||'01'||'01','yyyymmdd')+substr(p_week,5,2)*7-
to_char(trunc(to_date(substr(p_week,1,4)||'01'||'01','yyyymmdd'),'yyyy'),'d')+p_start_date-v_flag
into v_start_day
from dual;
return v_start_day;
end getweekday;