Oracle中日期的表示:
select to_char(sysdate,'CC WW W D DDD YYYY/MM/DD year month day') FROM DUAL
其中
CC    为世紀
WW 为一年中的周
W      为一個月中的周
D      为星期几
DDD 为一年中的第几天
year  为年
month 为月
day      为星期几

SQL>  select to_char(sysdate,'day') from dual; 
IWoracle中trunc函数用法WW的区别
IWISO标准周
WWoracle标准周
举例:
SELECT to_char(to_date('20051203','yyyymmdd'),'WW') "WW03",
      to_char(to_date('20051203','yyyymmdd'),'IW') "IW03",
      to_char(to_date('20051204','yyyymmdd'),'WW') "WW04",
      to_char(to_date('20051204','yyyymmdd'),'IW') "WW04",
      to_char(to_date('20051205','yyyymmdd'),'WW') "WW05",
      to_char(to_date('20051205','yyyymmdd'),'IW') "WW05"
FROM dual;
Oracle中发现的WWIW的规律
WW
    每年的11日作为当年的第一周的第一天(不管当年的11日是星期几);
    比如:2004/01/01 是周四, Oracle中被定义为2004WW的第一周的第一天;
    SELECT TO_CHAR(TO_DATE('20040101','YYYYMMDD'),'YY:WW'),TO_CHAR(TO_D
ATE('20040107','YYYYMMDD'),'YY:WW'),TO_CHAR(TO_DATE('20040108','YYYYMMDD'),'YY:WW') FROM DUAL;
IW
    以周别为主线 ,每年最多可以有53个周B别,但是每年至少要包含52个周别;
如果一年当中第52周别之后至当年的1231日之间,还有大于或等于4天的话,则定为当年的第53周,否则剩余这些天数被归为下一年的第1周;如果在不足52周别的话,则以下一年的时间来补;每周固定的从周一开始作为本周的第1天,到周日作为本周的第7天;比如:在Oracle 2006/01/01 依然属于IW周别 05年的第52周的第7
SELECT TO_CHAR(TO_DATE('20051226','YYYYMMDD'),'IY:IW'),TO_CHAR(TO_DATE('20060101','YYYYMMDD'),'IY:IW') FROM DUAL;
关于Oracle to_char()函数中的IW,WW 周别显示
===========================================================
作者: tolywang(tolywang.itpub)
发表于:2008.03.24 09:49
分类: Oracle数据库管理
出处:tolywang.itpub/post/48/458073
---------------------------------------------------------------
查今天是 "今年" 的第几周


  select to_char(sysdate,'ww') from dual;

  或

  select to_char(sysdate,'iw') from dual;

  附注:
上文所提之iwww格式在doc内解释如下

  IW = Week of year (1-52 or 1-53) based on the ISO standard

  WW = Week of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year.
周日都是第12
select to_char(to_date('20080323','yyyymmdd'),'WW') from dual;
select to_char(to_date('20080323','yyyymmdd'),'IW') from dual;
周一其中一个是 12 周,一个是第 13 按照中国习惯应该式 IW (ISO Standard Week ) 比较合适
select to_char(to_date('20080324','yyyymmdd'),'WW') from dual;
select to_char(to_date('20080324','yyyymmdd'),'IW') from dual;
tolywang 发表于:2008.03.24 09:49 ::分类: ( Oracle数据库管理 ) ::阅读:(2468) :: 评论 (2) :: 引用 (0)
re: 关于Oracle to_char()函数中的IW,WW 周别显示 [回复]
详细讲解Oracle数据库的周数计算
1、日期计算,算第n周的第一天及最后一天是几号。
  1ww的算法为每年11日为第一周开始,date+6为每一周结尾
  例如20050101为第一周的第一天,而第一周的最后一天为20050101+6=20050107
  公式 每周第一天 date + * 7 - 7
  每周最后一天:date + * 7 - 1
  你会发现怎么编排格式都会跑掉。
  2、日期计算,算第n周的第一天及最后一天是几号。 1ww的算法为每年11日为第一周开始,date+6为每一周结尾
  例如20050101为第一周的第一天,而第一周的最后一天为20050101+6=20050107
  公式 每周第一天 date + * 7 - 7
  每周最后一天:date + * 7 - 1
  如果以ww格式为主,第117周的起迄如下
  127.0.0.1:asdb:WF>select to_date('20050101','yyyymmdd') + 1*7-7,to_date('20050101','yyyymmdd') + 1*7-1 from dual;
  TO_DATE(' TO_DATE('
  01-JAN-05 07-JAN-05
  127.0.0.1:asdb:WF>select to_date('20050101','yyyymmdd') + 17*7-7,to_date('20050101','yyyymmdd') + 17*7-1 from dual;
  TO_DATE(' TO_DATE('
  23-APR-05 29-APR-05
  Elapsed: 00:00:00.00
  验证如下
  127.0.0.1:asdb:WF>select to_char(to_date('20050422','yyyymmdd'),'ww') as weekn,to_c
har(to_date('20050423','yyyymmdd'),'ww') as week1,to_char(to_date('20050429','yyyymmdd'),'ww') as week2,to_char(to_date('20050430','yyyymmdd'),'ww') as weekn2 from dual;
  WEEK WEEK WEEK WEEK
  16 17 17 18
  Elapsed: 00:00:00.00
  127.0.0.1:asdb:WF>
2iw的算法为星期一至星期日算一周,且每年的第一个星期一为第一周,
  例如20050101为星期六,所以用iw的算法是前年的53周,而20050103之后才是第一周的开始。
  公式 每周第一天 next_day(date) + * 7 - 7
  每周最后一天:next_day(date) + * 7 - 1
  如果以iw格式为主,第117周的起迄如下
  127.0.0.1:asdb:WF>select next_day(to_date('20050101','yyyymmdd'),'MONDAY')+ 1 * 7 - 7 as first_day,next_day(to_date('20050101','yyyymmdd'),'MONDAY')+ 1 * 7 - 1 as last_day from dual;
  FIRST_DAY LAST_DAY
  03-JAN-05 09-JAN-05
  Elapsed: 00:00:00.00
  127.0.0.1:asdb:WF>
  127.0.0.1:asdb:WF>select next_day(to_date('20050101','yyyymmdd'),'MONDAY')+ 17 * 7 - 7 as first_day,next_day(to_date('20050101','yyyymmdd'),'MONDAY')+ 17 * 7 - 1 as last_day from dual;
  FIRST_DAY LAST_DAY
  25-APR-05 01-MAY-05
  Elapsed: 00:00:00.00
  127.0.0.1:asdb:WF>
  验证如下
  127.0.0.1:asdb:WF>select to_char(to_date('20050424','yyyymmdd'),'iw') as weekn,to_char(to_date('20050425','yyyymmdd'),'iw') as week1,to_char(to_date('20050501','yyyymmdd'),'iw') as week2,to_char(to_date('20050502','yyyymmdd'),'iw') as weekn2 from dual;