Oracle中对于星期的计算规则中,其中关于计算本周是一年的第几周,有两种格式,IW和WW,其中的区别官方文档解释如下:
- IW:基于 ISO标准计算出来的该年的第几周(1-52 or 1-53) 。
- WW:该年的第几周(1-53),其中第1周指该年的第1天至第7天。
从文档中可以看出,WW的算法是: int(dayOfYear+6)/7,个人觉得这种算法有点“2”。相信一般情况下,我们不会使用WW的吧,应该IW使用的比较多。
关于Oracle提到的这个星期的计算ISO标准,是这样的: - 每个星期总是从周一开始,周日结束。
- 如果1月1日是周五、周六或周日,则这一周算为上一年的最后一周,因为这周的大部分时间属于上一年。
- 如果1月1日是周一、周二、周三或周四,则这一周算为新年的第一周,因为这周的大部分时间属于新的一年。
1:在oracle里边要判断一年有多少周可以通过以下的代码来判断:(此处主要是IW标准)
WITH PARAMS AS (SELECT '2017' AS NF FROM DUAL) SELECT TO_CHAR(TO_DATE(PM.NF || '-12-28','YYYY-MM-DD'),'IYYYIW') FROM DUAL LEFT JOIN PARAMS PM ON 1=1
这样就可以获取到2017年最后一周是多少,也就可以获取2017年最后一周了。为什么要取‘-12-28’?
因为每一年的12月28号肯定是最后一年的最后一周所在日期。