oracle中如何算周数 oracle获取周几

Oracle计算周数的几种方式比如星期一到星期天算一周 查2011年7月完整周数 select max(count1) - 1 from (SELECT count(1) count1 FROM DUAL WHERE TO_CHAR(ADD_MONTHS(LAST_DAY(to_date('201107', 'yyyyMM')), -1)LEVEL, 'DAY') = '星期一' CONNECT BY LEVEL
oracle取得周数什么时候是oracle标准[Oracle] 日期处理
本篇是针对以上一篇中“获取日期的星期” 部分的展开 。
计算标准
Oracle 里支持两种标准的时间,一种是oracle 自身的标准,另一种是ISO 的标准1.oralce 标准
1) 每年的 1 月1号作为这一年的第一天 。(不管这一天是星期几)比如:2013/01/01 是星期二, 这一天作为2013年的第一天 。
2) 周数计算公式week = int(dayOfYear 6)/7; dayOfYear 是这一天是这一年的第几天3) 周数区间:1-53
2. ISO标准
1)每个星期总是从周一开始,周日结束
2)如果1月1日是周五、周六或周日,则这一周算为上一年的最后一周,因为这周的大部分时间属于上一年3)如果1月1日是周一、周二、周三或周四,则这一周算为新年的第一周,因为这周的大部分时间属于新的一年4)时间区间: 1-52 or 1-53
【oracle中如何算周数 oracle获取周几】举例来说:对于1998和1999年的1月1日,1998年是算第一周,而1999年的1月1日却算为上一年的最后一周 。
Table 3-7 First ISO Week of the Year: Example 1, January 1998MoTuWeThFrSaSuISO Week
---12341 ISO week of 1998
5678910112 ISO week of 1998
121314151617183 ISO week of 1998
192021222324254 ISO week of 1998
262728293031-5 ISO week of 1998
Table 3-8 First ISO Week of the Year: Example 2, January 1999MoTuWeThFrSaSuISO Week
----12353ISO week of 1998
456789101 ISO week of 1999
111213141516172 ISO week of 1999
181920212223243 ISO week of 1999
252627282930314 ISO week of 1999
Oracle中获取年份
1.oralce 标准- YYYY
oralce 标准获取年份的方式很简单:
[sql] view plain copy 在CODE上查看代码片派生到我的代码片select TO_CHAR(TO_DATE('1997/01/01','YYYY/MM/DD'), 'YYYY') from dual;select TO_CHAR(TO_DATE('1997/12/31','YYYY/MM/DD'), 'YYYY') from dual;都是返回 1997
2. iso 标准 - IYYY
[sql] view plain copy 在CODE上查看代码片派生到我的代码片select TO_CHAR(TO_DATE('1997/01/01','YYYY/MM/DD'), 'IYYY') from dual;select TO_CHAR(TO_DATE('1997/12/31','YYYY/MM/DD'), 'IYYY') from dual;返回: 1997 , 1998
是不是很奇怪, 1997/12/31 号的年份是 1998 .
其实原因很简单,根据上面的标准,1998年1月1日是周四,则这一周算为新年的第一周,因为这周的大部分时间属于1998. 所以1997/12/31 也属于1998 年的第一周, 所以得到的是 1998.
你可能会想:
这是否因因为上面把字串转为日期的时候使用了YYYY这种格-- TO_DATE('1997/12/31','YYYY/MM/DD'),如果使用TO_DATE('1997/12/31','IYYY/MM/DD'), 'IYYY') 是否可以? 不幸的是,oracle 不支持这种用法 。
假设当天是1997/12/31 , 使用 TO_CHAR(sysdate,'IYYY') , 发现同样获得的是 1998.
总结一下: 如果从string 转换为日期 , 如果只取这个日期的年份的话 , 最好使用 YYYY 。
Oracle 获取周数
要获取某一天是这一年的第几周,同样有两种标准的区别:
1.oracle 标准- WW
这种标准和算法看起来很傻瓜 。int(dayOfYear 6)/7[sql] view plain copy 在CODE上查看代码片派生到我的代码片select TO_CHAR(TO_DATE('1997/01/01','YYYY/MM/DD'), 'YYWW') from dual;select TO_CHAR(TO_DATE('1997/01/08','YYYY/MM/DD'), 'YYWW') from dual;select TO_CHAR(TO_DATE('1997/12/31','YYYY/MM/DD'), 'YYWW') from dual;很简单; 返回9701 ,9702,9753
不过这种标准在一般的公司使用的应该会比较少 。
2. iso 标准 - IW
[sql] view plain copy 在CODE上查看代码片派生到我的代码片select TO_CHAR(TO_DATE('1997/01/01','YYYY/MM/DD'), 'IYIW') from dual;select TO_CHAR(TO_DATE('1997/12/31','YYYY/MM/DD'), 'IYIW') from dual;返回:9701,9801
如上所述,1997/12/31 归到 1998 年的第一周 。
需要特别提醒的是:(本篇的精华)
年份 和 周数要使用同样的标准,不要混着使用,比如 :YYIW-- oracle 的年份,ISO的周数IYWW
否则的话,会得到一些错误的结果 。
[sql] view plain copy 在CODE上查看代码片派生到我的代码片select TO_CHAR(TO_DATE('1997/12/31','YYYY/MM/DD'), 'YYIW') from dual;返回:9701
整整少了一年 。
而且这种错误在不跨年的状况上你可能还不会发现, 一跨年 , 发现又回到了一年前 ^^
详细讲解Oracle数据库的“周数计算” ——日期计算 算第n周oracle中如何算周数的第一天及最后一天是几号 by keynes
================================================
—— wworacle中如何算周数的算法为每年 月 日为第一周开始 date为每一周结尾
—— 例如 为第一周oracle中如何算周数的第一天 而第一周oracle中如何算周数的最后一天为=
—— 公式 每周第一天 date周 *
—— 每周最后一天 date周 *
你会发现怎么编排格式都会跑掉
=========================================================================
——日期计算 算第n周的第一天及最后一天是几号 by keynes
=========================================================================
—— ww的算法为每年 月 日为第一周开始 date为每一周结尾
—— 例如 为第一周的第一天 而第一周的最后一天为=
—— 公式 每周第一天 date周 *
—— 每周最后一天 date周 *
—— 如果以ww格式为主 第 周的起迄如下
asdb WFselect to_date( yyyymmdd )* to_date( yyyymmdd )* from dual
TO_DATE( TO_DATE(
JAN JAN
asdb WFselect to_date( yyyymmdd )* to_date( yyyymmdd )* from dual
TO_DATE( TO_DATE(
APR APR
Elapsed
—— 验证如下
asdb WFselect to_char(to_date( yyyymmdd ) ww ) as weekn to_char(to_date( yyyymmdd ) ww ) as week to_char(to_date( yyyymmdd ) ww ) as week to_char(to_date( yyyymmdd ) ww ) as weekn from dual
WEEK WEEK WEEK WEEK
Elapsed
asdb WF
—— iw的算法为星期一至星期日算一周 且每年的第一个星期一为第一周
—— 例如 为星期六 所以用iw的算法是前年的 周 而 之后才是第一周的开始
—— 公式 每周第一天 next_day(date)周 *
—— 每周最后一天 next_day(date)周 *
—— 如果以iw格式为主 第 周的起迄如下
asdb WFselect next_day(to_date( yyyymmdd ) MONDAY )* as first_day next_day(to_date( yyyymmdd ) MONDAY )* as last_day from dual
FIRST_DAY LAST_DAY
JAN JAN
Elapsed
asdb WF
asdb WFselect next_day(to_date( yyyymmdd ) MONDAY )* as first_day next_day(to_date( yyyymmdd ) MONDAY )* as last_day from dual
FIRST_DAY LAST_DAY
APR MAY
Elapsed
asdb WF
—— 验证如下
asdb WFselect to_char(to_date( yyyymmdd ) iw ) as weekn to_char(to_date( yyyymmdd ) iw ) as week to_char(to_date( yyyymmdd ) iw ) as week to_char(to_date( yyyymmdd ) iw ) as weekn from dual
WEEK WEEK WEEK WEEK
Elapsed
其它
——== 查今天是 本月 的第几周
SELECT TO_CHAR(SYSDATE WW ) TO_CHAR(TRUNC(SYSDATE MM ) WW )AS weekOfMon from dual

SELECT TO_CHAR(SYSDATE W ) AS weekOfMon from dual
——== 查今天是 今年 的第几周
select to_char(sysdate ww ) from dual

select to_char(sysdate iw ) from dual
附注
上文所提之iw及ww格式在doc内解释如下
IW = Week of year ( or ) based on the ISO standard
WW = Week of year ( ) where week starts on the first day of the year and continues to the seventh day of the year
lishixinzhi/Article/program/Oracle/201311/18798
oracle中如何算周数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于oracle获取周几、oracle中如何算周数的信息别忘了在本站进行查找喔 。

    推荐阅读