日期:2014-05-16  浏览次数:20687 次

'iyyy-iw'去周问题

周是按照国际标准ISO 8601来表示的。以1月4日所在的那个星期为当年的第一个星期,
如:2005年1月1日是2004年53周,2005年1月3日是2005年01周。每个日历星期从星期一开始,星期日为第7天。

非iso: 永远以新年的第一天为第一周的星期一,第一周一定有七天,而且最后一周不一定有七天。
如:最后一天2009年12月30日是星期四,2010年1月1日确是2010年第一星期的星期一。
select to_char(to_date('2009-12-30', 'yyyy-mm-dd'), 'yyyy-ww') from dual union all
select to_char(to_date('2010-01-01', 'yyyy-mm-dd'), 'yyyy-ww') from dual union all
select to_char(to_date('2010-01-02', 'yyyy-mm-dd'), 'yyyy-ww') from dual

iso: 轮到星期几就是星期几,新年的第一天是星期几则为第一周的周期几,第一周不一定有七天,
而且一定会要最后一周满七天,如果这年最后一周未满七天,则这一周会持续到下一年的前几天。
如:最后一天2009年12月30日是星期四,则这周会持续到2010年1月3日(星期日)(此时用iyyy仍显示出2009),
2010年1月4日(此时用iyyy才显示出2010)才是2010年第一周的星期一,第一周持续到2010年1月10日(星期日) :加i
select to_char(to_date('2009-12-30', 'yyyy-mm-dd'), 'iyyy-iw') from dual union all
select to_char(to_date('2010-01-01', 'yyyy-mm-dd'), 'iyyy-iw') from dual union all
select to_char(to_date('2010-01-02', 'yyyy-mm-dd'), 'iyyy-iw') from dual union all
select to_char(to_date('2010-01-03', 'yyyy-mm-dd'), 'iyyy-iw') from dual union all
select to_char(to_date('2010-01-04', 'yyyy-mm-dd'), 'iyyy-iw') from dual union all
select to_char(to_date('2010-01-05', 'yyyy-mm-dd'), 'iyyy-iw') from dual union all
select to_char(to_date('2010-01-06', 'yyyy-mm-dd'), 'iyyy-iw') from dual union all
select to_char(to_date('2010-01-07', 'yyyy-mm-dd'), 'iyyy-iw') from dual union all
select to_char(to_date('2010-01-08', 'yyyy-mm-dd'), 'iyyy-iw') from dual union all
select to_char(to_date('2010-01-09', 'yyyy-mm-dd'), 'iyyy-iw') from dual union all
select to_char(to_date('2010-01-10', 'yyyy-mm-dd'), 'iyyy-iw') from dual

?