select sysdate, (CASE WHEN to_char(sysdate,'d')<to_char(TO_DATE(TO_CHAR(SYSDATE,'YYYY')||'0101','YYYYMMDD'),'d') THEN TO_NUMBER(to_char(sysdate,'FMWW'))+1 ELSE TO_NUMBER(to_char(sysdate,'FMWW')) END) from dual
我回复过的一个帖子,和你的情况很类似,我是通过自定义函数实现的 代码如下create or replace function testweek(rq in date) return varchar2 is week varchar2(10);strrq varchar2(10); yyyy varchar2(10); begin select to_char(rq,'yyyy') into yyyy from dual; select to_char(rq,'iw') into week from dual; select to_char(rq,'mm') into strrq from dual; if week='53' and strrq='01' then week:=1; else week:=week+1; end if; week:=yyyy||'-'||week;
(CASE WHEN to_char(sysdate,'d')<to_char(TO_DATE(TO_CHAR(SYSDATE,'YYYY')||'0101','YYYYMMDD'),'d')
THEN TO_NUMBER(to_char(sysdate,'FMWW'))+1
ELSE
TO_NUMBER(to_char(sysdate,'FMWW')) END)
from dual
代码如下create or replace function testweek(rq in date) return varchar2
is week varchar2(10);strrq varchar2(10);
yyyy varchar2(10);
begin
select to_char(rq,'yyyy') into yyyy from dual;
select to_char(rq,'iw') into week from dual;
select to_char(rq,'mm') into strrq from dual;
if week='53' and strrq='01' then
week:=1;
else week:=week+1;
end if;
week:=yyyy||'-'||week;
return(week);end ;原文链接如下
http://topic.csdn.net/u/20081211/18/ed683543-1bd4-49dd-9f76-0ddc0061400f.html
关键是IW:
SELECT TO_CHAR(to_date('2009-01-06','yyyy-mm-dd'),'FMIW') FROM DUAL;