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;
其中
CC 为世紀
WW 为一年中的周
W 为一個月中的周
D 为星期几
DDD 为一年中的第几天
year 为年
month 为月
day 为星期几
SQL> select to_char(sysdate,'day') from dual;
IW,oracle中trunc函数用法WW的区别
IW:ISO标准周
WW:oracle标准周
举例:
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;
WW:oracle标准周
举例:
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中发现的WW和IW的规律
WW:
每年的1月1日作为当年的第一周的第一天(不管当年的1月1日是星期几);
比如:2004/01/01 是周四, 在Oracle中被定义为2004年WW的第一周的第一天;
SELECT TO_CHAR(TO_DATE('20040101','YYYYMMDD'),'YY:WW'),TO_CHAR(TO_D
WW:
每年的1月1日作为当年的第一周的第一天(不管当年的1月1日是星期几);
比如:2004/01/01 是周四, 在Oracle中被定义为2004年WW的第一周的第一天;
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周别之后至当年的12月31日之间,还有大于或等于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;
以周别为“主线” ,每年最多可以有53个周B别,但是每年至少要包含52个周别;
如果一年当中第52周别之后至当年的12月31日之间,还有大于或等于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
---------------------------------------------------------------
发表于: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;
附注:
上文所提之iw及ww格式在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.
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周的第一天及最后一天是几号。
1)ww的算法为每年1月1日为第一周开始,date+6为每一周结尾
例如20050101为第一周的第一天,而第一周的最后一天为20050101+6=20050107
公式 每周第一天 :date + 周 * 7 - 7
每周最后一天:date + 周 * 7 - 1
你会发现怎么编排格式都会跑掉。
2、日期计算,算第n周的第一天及最后一天是几号。 1)ww的算法为每年1月1日为第一周开始,date+6为每一周结尾
例如20050101为第一周的第一天,而第一周的最后一天为20050101+6=20050107
公式 每周第一天 :date + 周 * 7 - 7
每周最后一天:date + 周 * 7 - 1
如果以ww格式为主,第1、17周的起迄如下
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>
2)iw的算法为星期一至星期日算一周,且每年的第一个星期一为第一周,
例如20050101为星期六,所以用iw的算法是前年的53周,而20050103之后才是第一周的开始。
公式 每周第一天 :next_day(date) + 周 * 7 - 7
每周最后一天:next_day(date) + 周 * 7 - 1
如果以iw格式为主,第1、17周的起迄如下
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;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论